{"version":3,"sources":["../node_modules/@stencil/core/internal/client lazy /^/.//.*$/ include: //.entry/.js$/ exclude: //.system/.entry/.js$/ groupOptions: {} namespace object","registerServiceWorker.js","models/Address.js","models/AddressType.js","utilities/datetimes.js","utilities/index.js","utilities/columnHelpers.js","models/Agency.js","models/AlertPreference.js","models/AlertMethod.js","models/ApplicationUser.js","models/ArrivalTime.js","models/BurnIgnitionType.js","models/BurnNoticeSubscriber.js","models/BurnPermit.js","models/BurnPermitApplicationStatus.js","models/BurnPermitApplicationStatusXref.js","models/BurnPermitArea.js","models/BurnPermitCondition.js","models/BurnPermitConditionXref.js","models/BurnPermitDocument.js","models/BurnPermitDocumentType.js","models/BurnPermitEquipmentConditionXref.js","models/BurnPermitReferenceDirectionXref.js","models/BurnPermitProhibitedDayConditionXref.js","models/BurnPermitWindDirectionConditionXref.js","models/BurnPermitFuel.js","models/BurnPermitFuelLoadingXref.js","models/BurnPermitLocation.js","models/BurnPermitOrder.js","models/BurnPermitOrderXref.js","models/BurnPermitPileGroup.js","models/BurnPermitSearch.js","models/BurnPermitSignature.js","models/BurnPermitSite.js","models/BurnPermitSiteEquipmentXref.js","models/BurnPermitStatus.js","models/BurnPermitStatusXref.js","models/BurnPermitRequiredContactCondition.js","models/BurnPermitUnit.js","models/BurnReason.js","models/BurnRequest.js","models/BurnRequestCancellationReason.js","models/BurnRequestSearch.js","models/BurnRequestStatus.js","models/BurnRequestStatusXref.js","models/BurnType.js","models/ContactMethod.js","models/County.js","models/CustomerInteraction.js","models/CustomerInteractionBurnPermitXref.js","models/CustomerInteractionDocument.js","models/CustomerInteractionStatus.js","models/CustomerInteractionStatusXref.js","models/CustomerInteractionType.js","models/DaysOfWeek.js","models/Direction.js","models/Distance.js","models/DuffType.js","models/Email.js","models/EquipmentType.js","models/FireDistrictDepartment.js","models/ForestHealthExempt.js","models/ForestHealthProblemType.js","models/ForestHealthExemptProblemTypeXref.js","models/ForestType.js","models/FuelDiameter.js","models/LocationQuarter.js","models/Person.js","models/PersonAgencyXref.js","models/PersonAlertPreferenceXref.js","models/PersonRegionXref.js","models/PersonType.js","models/Phone.js","models/PhoneType.js","models/PostBurn.js","models/Region.js","models/ReferenceDirection.js","models/ReferenceDirectionType.js","models/Rule.js","models/SpeciesWoodDensity.js","models/index.js","redux/OrmRedux.js","redux/AppRedux.js","config/map/colors.js","config/map/symbols.js","config/map/renderers.js","config/map/featureLayers.js","config/map/actions.js","config/map/geojsonLayers.js","redux/CreateStore.js","config/layerConfigs/Calendar.js","config/layerConfigs/Dashboard.js","config/layerConfigs/MyPermits.js","config/layerConfigs/MyRequests.js","config/layerConfigs/PermitApplication.js","config/layerConfigs/PermitSearch.js","config/layerConfigs/RequestSearch.js","config/layerConfigs/SmokeComplaints.js","config/layerConfigs/index.js","redux/MapRedux.js","redux/UiRedux.js","redux/ApplicantInfoSectionRedux.js","redux/BurnNoticeSubscriberRedux.js","redux/BurnPermitListRedux.js","redux/BurnPermitSearchRedux.js","redux/BurnPermitConditionsRedux.js","redux/BurnPermitFormRedux.js","redux/BurnPermitInstructionsRedux.js","redux/BurnPermitPileGroupRedux.js","redux/BurnPermitSignatureRedux.js","redux/BurnPermitOrderRedux.js","redux/BurnRequestListRedux.js","redux/BurnRequestDetailRedux.js","redux/BurnRequestSearchRedux.js","redux/CalendarRedux.js","redux/CustomerInteractionRedux.js","redux/DashboardRedux.js","redux/GeoCoordinateRedux.js","redux/FileRedux.js","redux/ApiRedux.js","redux/AgencyRedux.js","redux/PersonRedux.js","redux/UserRedux.js","redux/PostBurnRedux.js","redux/ReportsRedux.js","redux/RulesRedux.js","redux/MergeRedux.js","redux/CartRedux.js","redux/index.js","selectors/env.js","selectors/selectors.js","selectors/modelSelectors.js","selectors/userSelectors.js","sagas/AppSagas.js","sagas/FileSagas.js","sagas/OrmSagas.js","sagas/ApiSagas.js","selectors/permissionSelectors.js","selectors/agencySelectors.js","selectors/agentSelectors.js","sagas/AgencySagas.js","selectors/burnNoticeSubscriberSelectors.js","sagas/BurnNoticeSubscriberSagas.js","redux/RegionsRedux.js","sagas/RegionSagas.js","redux/BurnPermitLocationRedux.js","sagas/BurnPermitLocationSagas.js","selectors/burnPermitSignatureSelectors.js","selectors/burnPermitPermissionSelectors.js","sagas/BurnPermitSignatureSagas.js","redux/BurnPermitFuelsRedux.js","sagas/BurnPermitFuelsSagas.js","selectors/forestHealthSelectors.js","selectors/burnPermitSelectors.js","selectors/burnPermitPileGroupsSelectors.js","utilities/files.js","sagas/BurnPermitPileGroupSagas.js","selectors/conditionsSelectors.js","sagas/BurnPermitConditionSagas.js","redux/BurnPermitSiteRedux.js","sagas/BurnPermitSiteSagas.js","selectors/burnRequestPermissionSelectors.js","selectors/personSelectors.js","sagas/PersonSagas.js","selectors/applicantInfoSelectors.js","sagas/BurnPermitApplicantInfoSagas.js","sagas/BaseSagas.js","selectors/orderSelectors.js","sagas/BurnPermitOrdersSagas.js","selectors/appSelectors.js","sagas/BurnPermitSagas.js","redux/BurnPermitAreaRedux.js","sagas/BurnPermitAreaSagas.js","selectors/burnRequestSelectors.js","selectors/postBurnSelectors.js","sagas/PostBurnSagas.js","redux/ForestHealthRedux.js","sagas/ForestHealthSagas.js","sagas/BurnRequestDetailSagas.js","sagas/CalendarSagas.js","sagas/GeoCoordinateSagas.js","redux/SearchRedux.js","selectors/customerInteractionSelectors.js","selectors/regionSelectors.js","sagas/CustomerInteractionSagas.js","sagas/DashboardSagas.js","sagas/ReportSagas.js","selectors/ruleSelectors.js","sagas/RulesSagas.js","sagas/SearchSagas.js","sagas/UserSagas.js","sagas/index.js","components/withRouter.js","components/ErrorMessage.js","components/Icons/DangerIcon.js","components/Icons/DownloadPDF.js","components/Icons/SuccessIcon.js","components/SuccessToast.js","components/ErrorBoundary.js","components/LoadingBar.js","selectors/uiSelectors.js","components/FormControls/PopoverButton.js","components/NetworkStatus.js","hooks/useInterval.js","hooks/useOnlineSelector.js","hooks/useToggle.js","hooks/useShowModal.js","utilities/stopEvent.js","hooks/useTableCellLink.js","hooks/useGetSearchExportFilename.js","hooks/useToggleNavbar.js","images/dnr_logo_white.png","components/Navbar/Banner.js","hooks/useNavClick.js","components/Navbar/NavbarDropdownItem.js","components/Navbar/NavbarDropdown.js","components/Navbar/Left/Admin.js","components/Navbar/NavbarItem.js","components/Navbar/Left/Regions.js","components/Navbar/Left/Calendar.js","components/Navbar/Left/Dashboard.js","components/Navbar/Left/Landowners.js","components/Navbar/Left/Permits.js","components/Navbar/Left/BurnRequests.js","components/Navbar/Left/SmokeComplaints.js","components/Navbar/Left/BurnNoticeSubscriber.js","components/Navbar/Left/index.js","components/Navbar/Right/Help.js","components/Navbar/Right/Logout.js","components/Navbar/Right/Account.js","components/Navbar/Right/NavHistory.js","components/Navbar/Right/index.js","components/Navbar/index.js","components/AuditData.js","components/Upload/Dropzone.js","components/Upload/Upload.js","components/Upload/index.js","components/Alerts/ForestHealthDocAlert.js","components/Alerts/PileLocationDocAlert.js","components/FormControls/FormError.js","components/Search/hooks.js","components/Icons/RequiredIndicator.js","components/FormControls/AssignedStaff.js","components/FormControls/AssignToMe.js","components/FormControls/AutoComplete.js","components/FormControls/ButtonGroupButton.js","components/FormControls/CalculateButton.js","components/FormControls/RequiredLabel.js","components/FormControls/CheckBoxes.js","components/FormControls/DownloadAllPermitDocuments.js","components/FormControls/FormTour.js","components/FormControls/FuelDiameter.js","components/FormControls/FuelDiameters.js","components/FormControls/RadioInputs.js","components/FormControls/RowToggler.js","components/FormControls/Select.js","components/FormControls/TimePicker.js","components/FormControls/ValidatingField.js","components/FormControls/YesNoButtonGroup.js","components/FormControls/YesNoRadioButtonGroup.js","components/Alerts/TonnageCalculationDocAlert.js","components/ConfirmationModal.js","components/PermitSections/ApplicationDocuments.js","components/PermitSections/FormSection.js","components/Effect.js","utilities/props.js","components/Forms/AddressForm.js","components/Forms/AgencyForm.js","components/Forms/PhoneForm.js","components/Forms/EmailForm.js","utilities/forms.js","components/Forms/BurnNoticeSubscriberForm.js","selectors/mapSelectors.js","selectors/geoSelectors.js","utilities/retry.js","components/Forms/GeoCoordinateForm.js","components/Forms/PersonForm.js","components/Forms/PLSSForm.js","components/ExternalLink.js","components/Modals/DidNotBurn.js","components/Forms/PostBurnForm.js","components/Forms/LinkRuleForm.js","components/Forms/RuleForm.js","components/Forms/RuleListForm.js","components/Forms/MergeForm.js","components/PermitSections/ApplicantInfo.js","components/PermitSections/BurnArea.js","utilities/map.js","components/ESRIMap.js","components/PermitSections/BurnLocation.js","components/PermitSections/Fuels.js","components/PermitSections/PileGroups/Form/Buttons/DeletePile.js","components/PermitSections/PileGroups/Form/Buttons/DeleteAllPiles.js","components/PermitSections/PileGroups/Form/Buttons/CancelEditPile.js","components/Icons/DownloadCSV.js","components/PermitSections/PileGroups/Form/Buttons/BatchUpload.js","components/PermitSections/PileGroups/Form/Buttons/AddPile.js","components/PermitSections/PileGroups/Form/DimensionField.js","components/PermitSections/PileGroups/FormGroupClasses.js","components/PermitSections/PileGroups/Form/PileGroupForm.js","images/pile_shapes/half_sphere.gif","images/pile_shapes/paraboloid2.gif","images/pile_shapes/half_cylinder.gif","images/pile_shapes/half_cone.gif","images/pile_shapes/cone2.gif","images/pile_shapes/half_ellipsoid.gif","images/pile_shapes/irreg_solid.gif","components/DataTable.js","components/Modals/CloseModalButton.js","components/PermitSections/PileGroups/Instructions.js","components/PermitSections/PileGroups/Alerts/MustCalculate.js","components/PermitSections/PileGroups/EstimateTonnage.js","components/PermitSections/PileGroups/Alerts/AreaIsExempt.js","components/PermitSections/PileGroups/Alerts/LegacyTonnage.js","components/PermitSections/PileGroups/Alerts/NeedsPileGroups.js","components/PermitSections/PileGroups/PileGroups.js","components/PermitSections/Signatures/AgreementTerms.js","components/PermitSections/Signatures/OnlinePopover.js","selectors/instructionsSelectors.js","components/Instructions/StepsNav.js","components/Instructions/Steps/Apply.js","components/Instructions/Steps/Approved.js","components/Instructions/Steps/AutoIssuedSteps.js","components/Instructions/Steps/Denied.js","components/Instructions/Steps/Issued.js","components/Instructions/Steps/NoPaySteps.js","components/PermitFeePopover.js","components/Instructions/Steps/Pay.js","components/Instructions/Steps/PrivateAndAgentAndDNRSteps.js","components/Instructions/Steps/Review.js","components/Instructions/Steps/Separator.js","components/Instructions/Steps/Sign.js","components/Instructions/Steps/Submit.js","components/Instructions/index.js","components/Instructions/Instructions.js","components/Modals/ApplicationNextSteps.js","components/Modals/CopyApplication.js","components/Modals/DeleteApplication.js","components/Modals/ForcePermitApplicationSignature.js","components/Modals/PermitNextSteps.js","components/Modals/ConditionsWarning.js","components/Modals/DocuSignSteps.js","components/Modals/DocuSignModal.js","components/Modals/IssuePermit.js","components/Modals/ReIssuePermit.js","components/Modals/PreviewPermit.js","components/Modals/SignApplication.js","components/PermitSections/Signatures/Alerts/AutoApproval.js","components/PermitSections/Signatures/Alerts/BurnReasonDoc.js","hooks/useDownloadPermitFile.js","components/PermitSections/Buttons/DownloadApplicationLinks.js","components/PermitSections/Signatures/Cards/ApplicationSignature.js","components/PermitSections/Signatures/Buttons/SignPermit.js","components/PermitSections/Signatures/Permit/ApplicantSignature.js","components/PermitSections/Signatures/Permit/ApproverSignature.js","components/PermitSections/Buttons/DownloadPermitLinks.js","components/PermitSections/Signatures/Cards/PermitSignature.js","hooks/usePermitFileUpload.js","components/PermitSections/Signatures/Modals/UploadPermitWarning.js","components/PermitSections/Signatures/index.js","selectors/burnPermitSiteSelectors.js","components/FormControls/BurnPermitSiteEquipment.js","components/FormControls/BurnPermitReferenceDirections.js","components/PermitSections/Site.js","components/PermitStatus/ApplicationStatusForm.js","components/PermitStatus/CommentRow.js","components/Modals/ExtendPermit.js","components/PermitStatus/ExtendPermitForm.js","components/PermitStatus/ValidDateField.js","components/PermitStatus/PermitDurationField.js","components/PermitStatus/IssuePermitForm.js","components/PermitStatus/RevokePermitForm.js","components/PermitStatus/SuspensionForm.js","components/PermitSections/Status.js","components/PermitSections/PermitFailedToLoad.js","components/AgentUnverified.js","components/Profile/Icons/style.js","components/Profile/Icons/Complete.js","components/Profile/Icons/Incomplete.js","components/Profile/Icons/Status.js","components/Profile/ProfileStatus.js","components/PermitSections/Apply/HowToApply.js","components/PermitSections/Apply/NoPermitModal.js","components/PermitSections/Apply/ImprovedPropertyCard.js","components/PermitSections/Apply/UnimprovedPropertyCard.js","components/PermitSections/Apply/DoYouNeedABurnPermit.js","components/PermitSections/Apply/ApplicationMethods.js","components/PermitSections/Apply/LoadingApplication.js","components/PermitSections/Apply/CreateBurnPermit.js","components/PermitSections/ForestHealthExempt.js","components/PermitSections/Nav.js","components/PermitSections/StatusHeader.js","components/PermitSections/Tonnage.js","components/NotFound.js","components/PermitOrders/BurnPermitCartSummary.js","components/PermitOrders/PhysicalPaymentForm.js","components/PermitOrders/RefundForm.js","components/PermitOrders/OrderPaymentSummary.js","components/PermitOrders/RemovePermitFromOrderModal.js","components/PermitOrders/BurnPermitOrderDetail.js","components/DocuSign/PermitAppLink.js","components/DocuSign/ApplicationSigned.js","components/DocuSign/CancelSigning.js","components/DocuSign/DeclineSigning.js","components/DocuSign/PermitSigned.js","components/MailTo.js","components/DocuSign/SigningError.js","components/DocuSign/DocuSignCallback.js","components/ReloadApp.js","components/Reports/ReportMessageCard.js","components/Reports/ReportViewer.js","components/OfflineMessage.js","components/AppLoading.js","components/GeneralMessage.js","components/CustomerInteraction/Smoke/TourSteps.js","components/CustomerInteraction/Smoke/LatLongEffect.js","components/CustomerInteraction/Smoke/FollowUpForm.js","components/CustomerInteraction/Smoke/ValidationSchema.js","models/BurnComplaintSearchResult.js","components/CustomerInteraction/Smoke/LinkBurn/AssociatedBurns.js","components/SearchInputs/SearchInput.js","components/SearchInputs/ApplicationId.js","components/SearchInputs/DateRange.js","components/SearchInputs/NumberRange.js","components/SearchInputs/PermitNumber.js","components/SearchInputs/UGA.js","components/SearchInputs/ForestHealth.js","components/CustomerInteraction/Smoke/LinkBurn/SearchForm.js","components/CustomerInteraction/Smoke/LinkBurn/FindBurnsBtn.js","components/CustomerInteraction/Smoke/LinkBurn/LinkBurn.js","components/CustomerInteraction/CancelInteraction.js","components/CustomerInteraction/CustomerInteractionsMap.js","components/CustomerInteraction/Status/StatusTable.js","components/CustomerInteraction/Status/StatusForm.js","components/CustomerInteraction/Status/StatusDialog.js","components/CustomerInteraction/Smoke/SmokeForm.js","components/SimpleTable.js","components/CustomerInteraction/Smoke/SmokeSearch.js","components/CustomerInteraction/Smoke/SmokeSuccess.js","components/Dashboard/Tile.js","components/Dashboard/Notices.js","selectors/dashboardSelectors.js","containers/DashboardContainer.js","components/CalendarModal.js","selectors/calendarSelectors.js","containers/CalendarContainer.js","components/PermitOrders/CartButton.js","components/PermitOrders/CartAlert.js","components/PermitOrders/CartModal.js","components/PermitOrders/Cart.js","components/ExportPermits.js","components/Search/useCart.js","components/Search/BurnPermitTable.js","containers/BurnPermitListContainer.js","containers/BurnPermitOrderListContainer.js","containers/BurnPermitOrderPayContainer.js","components/PostBurnPrompt.js","components/Modals/BurnRequestNotices.js","components/Search/BurnRequestTable.js","containers/BurnRequestListContainer.js","components/BurnRequestReview.js","components/BurnPermitSummary.js","components/PermitNumberSearch.js","components/RelatedBurnRequests.js","components/Modals/CancelBurnRequest.js","components/BurnRequestFormButtons.js","components/BurnRequestForm.js","containers/BurnRequestDetailContainer.js","components/Search/BurnPermitSearchForm.js","containers/BurnPermitSearchContainer.js","components/Search/BurnRequestSearchForm.js","components/ExportRequests.js","containers/BurnRequestSearchContainer.js","containers/BurnPermitFormContainer.js","containers/LoginContainer.js","components/Profile/ApiToken.js","components/Profile/HistorySettingForm.js","components/Profile/NetworkNotifications.js","components/Profile/UserGroups.js","components/Profile/MapLayers.js","containers/ProfileContainer.js","containers/ForestFuelTypesContainer.js","containers/AgencyContainer.js","containers/AgencyListContainer.js","containers/PersonListContainer.js","containers/PersonContainer.js","components/Conditions/ContactConditionForm.js","components/Conditions/ContactConditionList.js","components/Conditions/ContactConditionCard.js","components/Conditions/InputCondition.js","components/FormControls/Editor.js","components/Conditions/EditorCondition.js","components/Conditions/BaseCondition.js","components/Conditions/Condition.js","components/Conditions/ConditionCheckboxes.js","components/Conditions/MultiSelectCondition.js","components/Conditions/PermitConditions.js","components/Conditions/EditContactsAndConditions.js","containers/PermitConditionsContainer.js","components/TelPhone.js","components/RegionCard.js","containers/RegionListContainer.js","components/BurnRequestSummary.js","containers/PostBurnContainer.js","components/Reports/ReportCard.js","containers/ReportListContainer.js","containers/RulesContainer.js","containers/MergePeopleContainer.js","containers/HelpContainer.js","containers/MergeAgenciesContainer.js","containers/SmokeComplaintsContainer.js","containers/BurnNoticeSubscriberContainer.js","components/LoggingIn.js","middleware/PrivateRoute.js","middleware/AdminRoute.js","middleware/AdminOrAgentRoute.js","App.js","index.js"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","module","exports","id","_process$env","process","NODE_ENV","PUBLIC_URL","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","onUpdate","event","Event","dispatchEvent","onSuccess","catch","error","Address","_Model","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","streetLines","cityStateZip","this","StreetLine1","push","StreetLine2","StreetLine3","AddressCity","AddressState","AddressZipCode","concat","slice","addrStr","length","join","get","action","_this$fields","fields","AddressTypeId","Yup","shape","max","opts","required","ensure","min","idAttribute","when","is","Force","typeError","AddressId","attr","CreateDate","getDefault","Date","toISOString","CreateBy","UpdateDate","UpdateBy","AddressCountry","Active","AddressType","fk","to","relatedName","CountyId","as","Model","AddressTypeName","AddressTypeDescription","dayjs","extend","RelativeTime","utc","timezone","dateFormatter","date","format","undefined","dateOnly","split","_date","isValid","hour","minute","second","millisecond","getTomorrowsDate","add","getTodaysDate","getNow","isAfter","firstDate","secondDate","currencyFormatter","Intl","NumberFormat","style","currency","minimumFractionDigits","objHasProp","obj","prop","warn","Object","prototype","hasOwnProperty","call","scrollToFirst","scope","nodes","indexOf","_scope$split","_scope$split2","_slicedToArray","_class","root","document","getElementById","replace","querySelectorAll","els","Array","filter","d","offsetParent","targetEl","top","getBoundingClientRect","scrollTo","pageYOffset","behavior","previousElementSibling","nodename","nodeName","toLowerCase","focus","scrollToErrors","domScope","queryParamsToObject","_step","params","URLSearchParams","search","paramsObj","_iterator","_createForOfIteratorHelper","entries","s","n","done","entry","err","f","objectToQueryParams","map","k","getArrayValueFromText","arr","text","a","Text","Value","removeItemFromArray","item","newArr","_toConsumableArray","Set","idx","splice","addItemToArray","extractContentStateValues","editorState","formattedContent","plainTextContent","content","getCurrentContent","JSON","stringify","convertToRaw","getPlainText","parseContentStateValue","contentString","contentState","parsed","jsonContent","parse","convertFromRaw","_unused","ContentState","createFromText","EditorState","createWithContent","ICON","className","asHtml","html","_jsx","margin","width","ReactDomServer","renderToString","SUCCESS_ICON","DANGER_ICON","renderCheckIcon","data","drawType","renderCheckOrXIcon","renderDate","renderDateTime","dateTime","substring","formatLegalDesc","row","legalDesc","LegalDescQ1","LegalDescQ2","LegalDescSection","LegalDescTownship","LegalDescRange","LegalDescDirection","renderTons","toLocaleString","renderAcres","renderLatLong","Latitude","Longitude","formatAddress","address","Agency","name","AgencyName","AgencySubName1","AgencySubName2","AgencyOtherName","AgencyAbbreviation","nullable","title","type","defaultContent","render","AgencyId","AutoRegionApproval","PaysByVoucher","PhoneId","EmailId","AlertPreference","AlertPreferenceId","AlertPreferenceName","AlertPreferenceDescription","AlertMethod","AlertMethodId","AlertMethodName","AlertMethodDescription","ApplicationUser","FirstName","LastName","PersonId","UserName","ClaimType","ClaimValue","ArrivalTime","ArrivalTimeName","ArrivalTimeId","BurnIgnitionType","BurnIgnitionTypeName","BurnIgnitionTypeId","BurnIgnitionTypeDescription","BurnNoticeSubscriber","BurnNoticeSubscriberFirstName","trim","BurnNoticeSubscriberLastName","_ref","BurnNoticeSubscriberId","burnNoticeSubscriberEndpoint","Number","isInteger","visible","Phones","many","number","string","BurnPermit","BurnPermitNumber","BurnPermitId","includeId","_this","getClass","attrs","constructor","i","len","AgentId","BurnerPermitAddressId","BurnerPermitPrimaryPhoneId","orderable","searchable","targets","inputType","inputLabel","BurnPermitExpirationDate","BurnPermitEstimatedFee","BurnPermitValidDate","MailPermitToAgentFlag","MailPermitToLandownerFlag","TotalPermitTonnage","SuspensionStartDate","SuspensionEndDate","SuspensionComment","AgentPermitAddressId","AgentPermitPrimaryPhoneId","AgentPermitSecondaryPhoneId","BurnerId","BurnerPermitSecondaryPhoneId","BurnPermitAreaId","BurnPermitFuelId","BurnPermitLocationId","BurnPermitSiteId","ForestHealthExemptId","BurnPermitApplicationStatuses","through","BurnPermitConditions","BurnPermitStatuses","BurnPermitApplicationStatus","BurnPermitApplicationStatusName","BurnPermitApplicationStatusId","BurnPermitApplicationStatusDescription","BurnPermitApplicationStatusXref","BurnPermitApplicationStatusXrefName","permitId","history","url","xrefId","BurnPermitApplicationStatusXrefId","StatusDate","Comment","AssignedToId","SiteInspected","InternalOnly","ApplicationSection","BurnPermitArea","HarvestAcres","BurnTypes","BurnPermitCondition","BurnPermitConditionName","BurnPermitConditionDescription","BurnPermitConditionId","ParentConditionId","Category","numberSchema","prefix","positive","BurnPermitConditionXref","fieldName","conditionName","valueKey","isXref","schema","ProhibitedFrom","ProhibitedThrough","MaxWindSpeedMph","MinRelHumidityPercent","NoIgnitionFuelStart","NoIgnitionFuelEnd","DaysToExtinguish","MaxPilesBurnedAtOnce","MaxDiameterInches","MinWidthFireBreakFeet","NumberOfPeopleRequired","NumberOfPumpCans","PumpTrailerCapacityGallons","MaxPermitsToBurnAtOnce","NotifyBeforeIgnitionEntity","NotifyBeforeIgnitionPhone","MaxRequestTonnage","unit","BurnPermitConditionXrefId","BurnPermitEquipmentConditions","BurnPermitProhibitedDayConditions","BurnPermitWindDirectionConditions","OtherCondition","BurnPermitDocument","BurnPermitDocumentId","DocumentName","BurnPermitDocumentTypeId","BurnPermitDocumentType","BurnPermitDocumentTypeName","BurnPermitDocumentTypeDescription","BurnPermitDocumentTypeCategoryName","InternalUseOnly","BurnPermitEquipmentConditionXref","BurnPermitEquipmentConditionXrefId","EquipmentTypeId","OtherDescription","BurnPermitReferenceDirectionXref","ShowDistanceDirection","DistanceId","show","val","DirectionId","BurnPermitReferenceDirectionXrefId","ReferenceDirectionId","BurnPermitProhibitedDayConditionXref","BurnPermitProhibitedDayConditionXrefId","DayOfWeekId","BurnPermitWindDirectionConditionXref","BurnPermitWindDirectionConditionXrefId","requiredNumberSchema","message","BurnPermitFuel","valSchema","BurnIgnitionTypes","DuffTypeId","otherwise","DuffDepth","LitterDepth","Shrubs","GrassHerb","BurnPermitFuelLoadingXref","of","TonsPerAcre","FuelDiameterId","OtherBurnIgnitionTypeDescription","ConsumedTonnage","TotalTonsPerAcre","BurnPermitFuelLoadingXrefName","BurnPermitFuelLoadingXrefId","BurnPermitLocation","schemaType","_ref$latLong","latLong","_ref$plss","plss","shapeObj","Long","Lat","_this$fields2","LegalDescriptionSection","LegalDescriptionTownship","LegalDescriptionRange","LegalDescriptionQuarter1","LegalDescriptionQuarter2","LegalDescriptionDirectionId","_this$fields3","SlopePercent","ElevationFeet","RegionId","FireDistrictDepartmentId","DrivingDirections","options","LegalDescriptionDirectionLocation","IsUGA","AddressLocation","BurnPermitOrder","BurnPermitOrderInfoName","AllowPayment","ApplicationDetail","EPayResultMessage","PaymentCommandCode","PaymentHash","CardType","EPayReturnCode","PaymentMethod","SettlementSubmissionDate","ret","TransactionDate","isArray","BurnPermitOrderId","isVoucher","TotalAmountPaid","BurnPermitOrderAmount","ConfirmationNumber","AuthorizationCode","BurnPermitOrderVoucher","BurnPermitOrderXref","BurnPermitOrderXrefId","SHAPE_DIMENSION_PROPS","positiveVal","requiredDimension","dimensionPropName","includes","BurnPermitPileGroup","PilesConsumedTonnage","TotalNumberBurnPiles","_ref$input","input","_ref$output","output","dimensions","WidthOne","HeightOne","LengthOne","WidthTwo","HeightTwo","LengthTwo","SpeciesOneDensity","SpeciesOneCompositionPercent","SpeciesTwoDensity","SpeciesTwoCompositionPercent","baseProps","class","_objectSpread","PileCount","PileShape","PileType","HandPileSpecies","t","PercentSoil","PackingRatio","PileQuality","SpeciesOneDensityId","integer","SpeciesTwoDensityId","pt","c1","isNaN","BurnPermitPileGroupId","PileGroupName","GeometricVolume","TrueWoodVolume","PileBiomass","ConsumedFuel","Pm","Pm25","Pm10","Co","Co2","Ch4","Nmhc","LegacyTonnage","BurnPermitSearch","endpoint","props","showLandownerAgent","enableCart","cols","BurnPermitStatus","BurnPermitStatusDate","BurnPermitApplicationStatusDate","PermitIsSuspended","Address1","Address2","Address3","AddressZip","findIndex","c","BurnUnitName","Elevation","BurnAcres","TotalRequestedTons","TotalRequestedAcres","Agent","LandownerId","Landowner","LegacyId","County","PlannedIgnitionDates","PermitOrderId","IsForestHealthExempt","BurnPermitSignature","BurnPermitSignatureId","ApplicationEnvelopeId","ApplicationSignedDate","ApplicationSignedBy","PermitEnvelopeId","PermitApplicantSignedDate","PermitApplicantSignedBy","PermitApproverSignedDate","PermitApproverSignedBy","BurnPermitSite","HarvestDate","NumberPeopleOnsite","ForestTypeId","BurnReasonId","PlannedBurnDays","ClosedSeasonBurn","BurnPermitSiteEquipment","OnsiteFlag","OffsiteFlag","FireLineConstructionFlag","ExtinguishingFlag","OffsiteEquipmentArrivalTime","NumberOfGallons","OtherEquipmentDescription","NumberOfHandPilesToBurnAtOnce","NumberOfMachinePilesToBurnAtOnce","DaysOfWeek","ForestPracticePermitNumber","NumberHandPilesPerBurn","NumberMachinePilesPerBurn","TotalNumberHandPiles","TotalNumberMachinePiles","BarkBeetleOutbreakPreventionFlag","WaitForWetConditionsFlag","SnowOffDate","HandConstructedPileWidthFeet","MachineConstructedPileWidthFeet","HandConstructedPileHeightFeet","MachineConstructedPileHeightFeet","BurnPermitSiteEquipmentXref","_Yup$object$shape","_defineProperty","offsite","fire","ext","BurnPermitSiteEquipmentXrefId","BurnPermitStatusName","BurnPermitStatusId","BurnPermitStatusDescription","BurnPermitStatusXref","BurnPermitStatusXrefName","BurnPermitStatusXrefId","contactSchema","object","Contacts","array","BurnPermitRequiredContactConditionId","ContactName","PhoneNumber","test","toString","PhoneExt","BurnPermitRequiredContactCondition","BurnPermitUnit","BurnPermitUnitName","BurnPermitUnitId","BurnReason","BurnReasonCode","BurnReasonName","BurnReasonDescription","REACT_APP_SERVER_URL","BurnRequest","burnRequestId","isDnr","PlannedIgnitionPeriod","ProposedBurnArea","TotalProposedBurnQuantity","schemaShape","PlannedIgnitionTime","ignTime","hoursMins","parseInt","acres","parent","RemainingPermitAcres","tons","RemainingPermitTonnage","MultiDayBurnFlag","daysOfWeek","PlannedIgnitionDate","ignDate","ignDay","day","burnDates","diff","Math","abs","sort","d1","d2","currItem","nextItem","prid","BurnRequestId","BurnPriority","BurnRequestDate","SmokeDispersedFlag","RequestorComments","AutoGenerated","ParentRequestId","BurnRequestStatuses","BurnRequestCancellationReason","BurnRequestCancellationReasonId","BurnRequestCancellationReasonDescription","BurnRequestSearch","BurnRequestStatusDate","BurnRequestStatus","BurnRequestStartDate","BurnRequestEndDate","PlannedIgnitionStartDate","PlannedIgnitionEndDate","RequestStatusId","UnitName","Region","LegalDesc","MinAcres","MaxAcres","MinTons","MaxTons","BurnType","AgentName","LandownerName","HasPostBurn","MultiDayBurns","PostBurnDate","PostBurnTonnage","PostBurnArea","BurnRequestStatusName","BurnRequestStatusId","BurnRequestStatusDescription","BurnRequestStatusXref","BurnRequestStatusXrefName","requestId","BurnRequestStatusXrefId","BurnTypeName","BurnTypeId","BurnTypeDescription","ContactMethod","ContactMethodName","ContactMethodId","ContactMethodDescription","CountyName","CustomerInteraction","CustomerInteractionId","FollowUp","EmailAddress","InteractionDescription","CustomerInteractionStatuses","CustomerInteractionTypeId","CustomerInteractionBurnPermitXref","CustomerInteractionBurnPermitXrefId","CustomerInteractionDocument","CustomerInteractionDocumentId","DocumentKey","CustomerInteractionStatus","CustomerInteractionStatusId","CustomerInteractionStatusName","CustomerInteractionStatusDescription","CustomerInteractionStatusXref","CustomerInteractionStatusXrefId","CommentInternalOnly","ContactedReportingParty","CustomerInteractionType","CustomerInteractionTypeName","DayOfWeekName","Direction","DirectionName","DirectionAbbreviation","Distance","DistanceName","DuffType","DuffTypeName","Email","isEmailRequired","emailAddr","email","notRequired","NormalizedEmailAddress","EmailConfirmed","EquipmentType","EquipmentTypeName","EquipmentTypeDescription","EquipmentTypeCategoryName","FireDistrictDepartment","FireDistrictDepartmentDescription","FireDistrictDepartmentCode","ForestHealthExempt","ProblemTypeId","AlternativeToRxFire","AlternativeNotAppropriateReason","ForestHealthExemptionApprovalFlag","ForestHealthExemptionApprovalDate","ForestHealthProblemTypes","ForestHealthProblemType","ForestHealthProblemTypeName","ForestHealthProblemTypeId","ForestHealthProblemTypeDescription","ForestHealthExemptProblemTypeXref","ForestHealthExemptProblemTypeXrefId","ForestType","ForestTypeName","ForestTypeDescription","ForestTypeLocationName","ForestTypeExtendedName","FuelDiameter","FuelDiameterName","FuelDiameterDescription","FuelDiameterCategory","LocationQuarter","_len","args","_key","LocationQuarterName","LocationQuarterId","LocationQuarterDescription","Person","PersonFirstName","PersonLastName","dnrOnly","personId","personEndpoint","PersonMiddleName","PersonTypeId","IsUser","ParentId","ConvertedToAgency","AlertPreferences","Addresses","Regions","Agencies","PersonAgencyXref","PersonAgencyXrefId","PersonAgencyXrefAgencyId","PersonAgencyXrefPersonId","ConfirmedBy","ConfirmedOn","PersonAlertPreferenceXref","PersonAlertPreferenceXrefId","PersonRegionXref","PersonRegionXrefId","RegionDefaultAssignee","PersonRegionXrefRegionId","PersonRegionXrefPersonId","PersonType","PersonTypeName","PersonTypeDescription","Phone","PhoneExtension","PhoneTypeId","ReceivesAlerts","PhoneNumberConfirmed","PhoneType","PhoneTypeName","PhoneTypeDescription","PostBurn","_ref$pileBurn","pileBurn","_ref$broadcastNatural","broadcastNaturalBurn","PilesIgnitedPercent","BurnedBlackAcres","BurnedBlackPercent","percent","BurnedBlackCanopyPercent","BurnedBlackShrubPercent","FuelMoistureMethod","WeatherCollectionMethod","WeatherStationName","WindSpeedMph","NumberDaysSinceRain","TenHourFuelMoisturePercent","ThousandHourFuelMoisturePercent","DuffFuelMoisturePercent","MidflameWindSpeed","BurnedBlackPilePercent","BurnDate","IgnitionPeriod","flag","period","BurnTime","num","ConsumedTons","PostBurnComments","DidNotBurnReason","PostBurnId","DidNotBurn","RegionCode","RegionName","RegionAbbreviation","RegionDescription","RegionPhoneId","RegionAddressId","RegionEmailId","RegionCounties","ReferenceDirection","ReferenceDirectionTypeId","ReferenceDirectionType","ReferenceDirectionTypeName","ReferenceDirectionTypeDescription","ruleValueSchema","valueSchema","href","Rule","RuleId","RuleDescription","RuleValue","validationSchema","RuleType","RuleName","RuleEnabled","SpeciesWoodDensity","CommonName","Density","SpeciesWoodDensityId","TSN","ScientificName","orm","ORM","stateSelector","_createActions","createActions","upsert","upsertRange","destroy","destroyRange","destroyAll","insert","replaceAll","update","Types","OrmTypes","Creators","mapDataToModel","model","basePropsOnly","modelFields","matchingDataFields","mappedData","kLen","_ref6","modelName","modelIdArray","session","ormModel","idAttr","delete","reducer","createReducer","getEmptyState","_createReducer","INSERT","properties","create","UPSERT","_ref3","UPSERT_RANGE","_ref4","records","r","rLen","DESTROY","_ref5","modelId","modelInstance","withId","DESTROY_RANGE","DESTROY_ALL","_ref7","filterObj","targetModel","targetData","all","exists","REPLACE_ALL","_ref8","objects","UPDATE","_ref2","updateObj","entity","updateAppVersion","setPageTitle","showLoading","hideLoading","showSuccess","hideSuccess","logLastRoute","setReturnUrl","setHistoryLength","redirectTo","AppTypes","INITIAL_STATE","version","pageTitle","routeHistory","returnUrl","routeHistoryLength","redirectToRoute","UPDATE_APP_VERSION","newState","SET_PAGE_TITLE","SHOW_LOADING","HIDE_LOADING","SHOW_SUCCESS","HIDE_SUCCESS","LOG_LAST_ROUTE","lastRoute","route","SET_RETURN_URL","SET_HISTORY_LENGTH","newLength","REDIRECT_TO","PRIMARY_BLUE","DARK_BLUE","DARK_PURPLE","PRIMARY_ORANGE","GRAY","RED","GREEN","POLYGON_SYMBOL","color","outline","POINT_SYMBOL","size","POLYLINE_SYMBOL","DOCUMENTATION_SYMBOL","haloColor","haloSize","font","family","SUBMITTED_SYMBOL","INFO_REQUIRED_SYMBOL","UNDER_REVIEW_SYMBOL","DENIED_SYMBOL","APPROVED_SYMBOL","ISSUED_SYMBOL","SUSPENDED_SYMBOL","GetPermitSymbolByStatus","status","symbol","IN_UGA_SYMBOL","PIN_SYMBOL","REQUEST_SUBMITTED_SYMBOL","REQUEST_UNDER_REVIEW_SYMBOL","REQUEST_INFO_REQUIRED_SYMBOL","REQUEST_DENIED_SYMBOL","REQUEST_APPROVED_SYMBOL","GetRequestSymbolByStatus","POST_BURN_SYMBOL","weight","BURN_PERMIT_STATUS_POINT","field","defaultSymbol","uniqueValueInfos","BURN_REQUEST_STATUS_POINT","visualVariables","stops","label","UGA_BURN_REQUEST_STATUS_POINT","newInfo","POST_BURN_POINT","UGA_POST_BURN_POINT","SIMPLE_ORANGE_POLYGON","assign","cloneDeep","SIMPLE_BLUE_POLYGON","SIMPLE_GREEN_POLYGON","SIMPLE_DARK_BLUE_POLYGON","SIMPLE_DARK_PURPLE_POLYGON","FIRE_DANGER_OPACITY","FIRE_DANGER_OUTLINE","FIRE_DANGER_RENDERER","REACT_APP_WAMAS_GIS_SERVICES","REACT_APP_DNR_GIS_SERVICES","COUNTIES_SERVICE_URL","COUNTIES","outFields","renderer","labelingInfo","labelExpressionInfo","expression","popupTemplate","fieldInfos","TRS_SERVICE_URL","TRS","REGIONS_SERVICE_URL","REGIONS","FIRE_DISTRICTS_SERVICE_URL","FIRE_DISTRICTS","UGA","definitionExpression","FIRE_DANGER","BURN_BAN","SMOKE_PLANNING_AREAS","ALL_LAYERS","permitAction","layerId","actionId","customAction","evt","features","feat","layer","attributes","navigate","burnRequestAction","_this2","customerInteractionAction","_this3","dateExpression","latLongExpression","BURN_PERMITS_LAYER_ID","BURN_PERMITS","geometryType","expressionInfos","actions","bind","BURN_REQUESTS","ugaOnly","POST_BURNS","store","getStore","burnReqs","postBurns","CalendarLayerConfig","hiddenLayers","unavailableLayers","l","DashboardLayerConfig","MyPermitsLayerConfig","MyRequestsLayerConfig","PermitApplicationLayerConfig","requiredLayers","PermitSearchLayerConfig","RequestSearchLayerConfig","SmokeComplaintsLayerConfig","DEFAULT_CONFIGS","resetToInitialMapState","getLatLongFromMap","clearLatLong","setLatLong","showLayer","hideLayer","setConfigLayerVisibility","toggleAllConfigLayerVisibility","mapLoading","mapDoneLoading","toggleDownloadMapData","checkIfGraphicsOverlapLayerFeatures","graphicsOverlapFeatures","activeMapId","mapDragEnd","freeze","LatLong","GetLatLongFromMap","IncludeIntersectingFeatures","hiddenLayerIds","MapLoading","MapActive","downloadMapData","overlapGraphics","intersectingFeatures","graphicsOverlap","componentLayerConfigs","DEFAULT_COMPONENT_LAYER_CONFIGS","RESET_TO_INITIAL_MAP_STATE","CLEAR_LAT_LONG","SET_LAT_LONG","_ref2$IntersectingFea","IntersectingFeatures","GET_LAT_LONG_FROM_MAP","enable","SHOW_LAYER","HIDE_LAYER","MAP_LOADING","MAP_DONE_LOADING","TOGGLE_DOWNLOAD_MAP_DATA","CHECK_IF_GRAPHICS_OVERLAP_LAYER_FEATURES","_ref5$layerId","_ref5$graphics","graphics","GRAPHICS_OVERLAP_FEATURES","_ref6$overlap","overlap","_ref6$features","overlappingFeatures","SET_CONFIG_LAYER_VISIBILITY","configName","layerConfigIdx","layerConfig","TOGGLE_ALL_CONFIG_LAYER_VISIBILITY","layerIds","ACTIVE_MAP_ID","_ref9","_ref9$mapId","mapId","openModal","closeModal","toggleNavbar","UiTypes","Modal","showModal","modalKey","Navbar","isOpen","OPEN_MODAL","CLOSE_MODAL","TOGGLE_NAVBAR","resetApplicantInfo","getApplicantInfoData","setSelectedAgencyId","setSelectedAgentId","setSelectedLandownerId","setTargetLandowner","updateApplicantInfo","setSelectedApplicantInfo","setApplicantSectionLoading","setApplicantInfo","setMailToAgent","setContactData","ApplicantInfoTypes","agentId","landownerId","agencyId","mailToAgent","targetLandowner","sectionIsLoading","RESET_APPLICANT_INFO","SET_SELECTED_AGENCY_ID","SET_SELECTED_AGENT_ID","SET_SELECTED_LANDOWNER_ID","SET_MAIL_TO_AGENT","SET_SELECTED_APPLICANT_INFO","applicantInfo","SET_TARGET_LANDOWNER","GET_APPLICANT_INFO_DATA","SET_APPLICANT_SECTION_LOADING","loading","SET_CONTACT_DATA","stateProp","activeBurnNoticeSubscriberId","deactivateBurnNoticeSubscriber","getAllBurnNoticeSubscribers","getBurnNoticeSubscriber","getBurnNoticeSubscriberLookupData","newBurnNoticeSubscriber","createBurnNoticeSubscriber","updateBurnNoticeSubscriber","createLocalPhoneForBurnNoticeSubscriber","createBurnNoticeSubscriberPhone","deleteBurnNoticeSubscriberPhone","getBurnNoticeSubscriberEmail","deleteBurnNoticeSubscriberEmail","createBurnNoticeSubscriberEmail","setInactiveMetadata","BurnNoticeSubscriberTypes","activeBurnNoticeSubscriber","isNewBurnNoticeSubscriber","inactiveData","activeOnly","GET_BURN_NOTICE_SUBSCRIBER","burnNoticeSubscriberId","NEW_BURN_NOTICE_SUBSCRIBER","ACTIVE_BURN_NOTICE_SUBSCRIBER_ID","DEACTIVATE_BURN_NOTICE_SUBSCRIBER","SET_INACTIVE_METADATA","_ref3$activeOnly","BURN_PERMIT_ENDPOINT","togglePermitMap","getMyBurnPermits","meta","offline","effect","commit","rollback","closeDownloadModal","downloadBurnPermits","doneDownloadingBurnPermits","setDownloadStatus","resetDownloadStatus","BurnPermitListTypes","isMapShowing","lastDownload","lastDownloadDuration","isDownloading","DownloadStatuses","BurnPermitsDownloaded","StatusHistoryDownloaded","AreaInfoDownloaded","ApplicantInfoDownloaded","LocationInfoDownloaded","SiteInfoDownloaded","PileInfoDownloaded","FuelsInfoDownloaded","ConditionsDownloaded","MapDataDownloaded","TOGGLE_PERMIT_MAP","RESET_DOWNLOAD_STATUS","forEach","SET_DOWNLOAD_STATUS","target","CLOSE_DOWNLOAD_MODAL","DOWNLOAD_BURN_PERMITS","lastDownloadRaw","DONE_DOWNLOADING_BURN_PERMITS","lastDownloadFormatted","duration","seconds","minutes","toggleLocation","toggleSearchMap","resetSearchParams","setSearchParam","searchBurnPermits","searchParams","searchBurnPermitsSuccess","setDownloadingPermitsExport","downloadPermitsExport","resetPermitResults","BurnPermitSearchTypes","INITIAL_SEARCH_PARAMS","PermitId","AssignedTo","ApplicationStatusId","PermitStatusId","showMap","showLocation","defaultSearchParams","searchWarning","isDownloadingExport","TOGGLE_SEARCH_MAP","TOGGLE_LOCATION","SET_SEARCH_PARAM","param","SEARCH_BURN_PERMITS","_ref2$searchParams","reduce","acc","some","v","RESET_SEARCH_PARAMS","SET_DOWNLOADING_PERMITS_EXPORT","DOWNLOAD_PERMITS_EXPORT","RESET_PERMIT_RESULTS","getPermitConditions","setPermitForConditions","setActivePermitConditions","setContactConditions","setConditionErrors","clearConditionError","PermitConditionTypes","conditionErrors","burnPermitId","CLEAR_CONDITION_ERROR","conditionId","SET_CONDITION_ERRORS","errors","SET_PERMIT_FOR_CONDITIONS","activeBurnPermit","previousStep","nextStep","setActiveStep","savedAndNextStep","invalidStep","completedSteps","permitFailedToLoad","resetPermitLoadFail","createPermitApplication","createPermitApplicationRequest","localId","init","method","body","createPermitApplicationSuccess","deleteApplication","deleteApplicationRequest","deleteApplicationSuccess","unlockApplication","validatePermit","getBurnPermit","getBurnPermitDetail","agencySubmitBurnPermit","getBurnPermitStatusHistory","submitApplicationStatus","deleteApplicationStatus","deletePermitStatus","updateSuspension","clearSuspension","extendPermit","revokePermit","undoRevocation","copyApplication","getPermitFiles","downloadPermitFile","downloadAllFiles","doneDownloadingFiles","deletePermitFile","uploadPermitFiles","updateDocumentType","clearDocTypeInfo","checkIfFilesAreAlreadyAttached","toggleApplicationSummary","BurnPermitFormTypes","baseAppState","activeStep","invalidSteps","shouldValidate","applicationSummaryIsShowing","activeBurnPermitId","searchParam","applications","docTypeInfo","redirectToId","isDownloadingFiles","ACTIVE_BURN_PERMIT","instructionsAcknowledged","instructionStep","PERMIT_FAILED_TO_LOAD","UPDATE_DOCUMENT_TYPE","documentId","documentTypeId","_ref7$uploadAnyway","uploadAnyway","CLEAR_DOC_TYPE_INFO","PREVIOUS_STEP","app","NEXT_STEP","SET_ACTIVE_STEP","StepId","SAVED_AND_NEXT_STEP","COMPLETED_STEPS","StepIds","INVALID_STEP","VALIDATE_PERMIT","TOGGLE_APPLICATION_SUMMARY","GET_BURN_PERMIT_DETAIL","DOWNLOAD_ALL_FILES","DONE_DOWNLOADING_FILES","goToInstructionStep","acknowledgedInstructions","completedInstructionSteps","BurnPermitInstructionsTypes","COMPLETED_INSTRUCTION_STEPS","steps","GO_TO_INSTRUCTION_STEP","step","ACKNOWLEDGED_INSTRUCTIONS","BURN_PERMIT_PILE_GROUP_ENDPOINT","getBurnPileGroup","getBurnPileGroups","createBurnPermitPileGroup","createBurnPermitPileGroupRequest","updateBurnPermitPileGroup","updateBurnPermitPileGroupRequest","updateBurnPermitPileGroupSuccess","deleteteBurnPermitPileGroup","deleteBurnPermitPileGroupRequest","deleteBurnPermitPileGroupSuccess","estimateConsumedTonnage","addLocalPileGroup","editBurnPermitPileGroup","deletePileGroup","deleteLocalPileGroups","pileGroupRequestFailed","uploadBatchPiles","deleteAllPileGroups","BurnPermitPileGroupTypes","EditBurnPermitPileGroupId","RequestFailed","PILE_GROUP_REQUEST_FAILED","failed","EDIT_BURN_PERMIT_PILE_GROUP","getBurnPermitSignatures","signPermitApplication","confirmApplicationSignature","applicationSignatureConfirmed","previewPermit","signPermit","reIssuePermit","confirmPermitSignature","permitSignatureConfirmed","resetSignatureState","loadingDocuSignUrl","gettingSignatures","verifyingSignatures","docuSignSignatureEvent","signatureComplete","signatureFailed","acknowledgeSignatureSteps","BurnPermitSignatureTypes","SignatureProcessTypes","preview","issue","reissue","application","isLoadingDocuSignUrl","isGettingSignatures","isVerifyingSignatures","isReissuingPermit","SignatureUrl","confirmingSignature","confirmationFailed","signatureError","enableForceSignature","abandonedPermitApplicationId","acknowledgedSteps","_acknowledgedSteps","doNotShowSteps","_doNotShowSteps","APPLICATION_SIGNATURE_CONFIRMED","PERMIT_SIGNATURE_CONFIRMED","RESET_SIGNATURE_STATE","LOADING_DOCU_SIGN_URL","GETTING_SIGNATURES","getting","VERIFYING_SIGNATURES","verifying","RE_ISSUE_PERMIT","DOCU_SIGN_SIGNATURE_EVENT","SIGNATURE_COMPLETE","SIGNATURE_FAILED","enableForce","ACKNOWLEDGE_SIGNATURE_STEPS","processName","_ref9$doNotShowAgain","doNotShowAgain","getOrders","getBurnPermitDetailForCart","getBurnPermitOrderDetail","createBurnPermitOrder","updateBurnPermitOrder","setNewOrderId","updateOrderPermitIds","removePermitFromOrder","deleteOrder","BurnPermitOrderTypes","newBurnPermitOrderId","SET_NEW_ORDER_ID","burnPermitOrderId","UPDATE_ORDER_PERMIT_IDS","permitIds","createdOrderPermitIds","BURN_REQUEST_ENDPOINT","toggleMap","togglePbs","getMyBurnRequests","downloadRequests","closeRequestsDownloadModal","doneDownloadingBurnRequests","setRequestsDownloadStatus","resetRequestsDownloadStatus","BurnRequestListTypes","isPostBurnShowing","BurnRequestsDownloaded","PostBurnsDownloaded","TOGGLE_MAP","TOGGLE_PBS","showPbs","DOWNLOAD_REQUESTS","RESET_REQUESTS_DOWNLOAD_STATUS","SET_REQUESTS_DOWNLOAD_STATUS","CLOSE_REQUESTS_DOWNLOAD_MODAL","DONE_DOWNLOADING_BURN_REQUESTS","now","resetRequestToInitial","updateRequestSearchParam","loadingBurnRequest","doneLoading","getBurnPermitInfo","getBurnRequestInfo","redirect","getBurnRequestSuccess","getBurnRequestStatusHistory","createRequest","saveRequest","submitRequest","cancelBurnRequest","cancelBurnRequestSuccess","agencySubmitRequest","deleteBurnRequest","deleteRequestStatus","submitRequestStatus","overrideDecision","quickSubmitRequest","quickSubmitRequestFailure","quickSubmitRequestSuccess","BurnRequestDetailTypes","RESET_REQUEST_TO_INITIAL","UPDATE_REQUEST_SEARCH_PARAM","permitNumber","LOADING_BURN_REQUEST","DONE_LOADING","toggleRequestLocation","toggleRequestSearchMap","resetRequestSearchParams","setRequestSearchParam","searchBurnRequests","searchBurnRequestsSuccess","setDownloadingRequestsExport","downloadRequestsExport","resetRequestResults","BurnRequestSearchTypes","TOGGLE_REQUEST_SEARCH_MAP","TOGGLE_REQUEST_LOCATION","SET_REQUEST_SEARCH_PARAM","SEARCH_BURN_REQUESTS","RESET_REQUEST_SEARCH_PARAMS","SET_DOWNLOADING_REQUESTS_EXPORT","DOWNLOAD_REQUESTS_EXPORT","RESET_REQUEST_RESULTS","setStartEnd","dataStartDate","dataEndDate","viewStartDate","viewEndDate","viewType","payload","calendarEventsSuccess","setEvents","setView","CalendarTypes","startDate","toJSON","endDate","events","SET_START_END","SET_EVENTS","SET_VIEW","view","getCustomerInteraction","newCustomerInteraction","toggleCustomerInteractionMap","clearCustomerInteractionSearch","upsertCustomerInteraction","upsertCustomerInteractionSuccess","getCustomerInteractionLookups","submitSmokeComplaint","createCustomerInteractionStatus","createCustomerInteractionStatusSuccess","associateBurn","getAssociatedBurns","associatedBurns","removeBurnAssociation","removeBurnAssociationSuccess","smokePromptAcknowledged","tourCompleted","searchCustomerInteractions","searchCustomerInteractionsResults","showCustomerInteractionStatusForm","toggleFindBurnsForm","findAssociatedBurns","findAssociatedBurnsResults","geocodeCustIntAddress","geocodeCustIntAddressSuccess","CustomerInteractionTypes","targetType","Smoke","acknowledgedPrompt","mapState","searchResults","success","showForm","CLEAR_CUSTOMER_INTERACTION_SEARCH","interactionType","TOGGLE_CUSTOMER_INTERACTION_MAP","currMapState","SEARCH_CUSTOMER_INTERACTIONS","SEARCH_CUSTOMER_INTERACTIONS_RESULTS","results","NEW_CUSTOMER_INTERACTION","UPSERT_CUSTOMER_INTERACTION_SUCCESS","CREATE_CUSTOMER_INTERACTION_STATUS_SUCCESS","SUBMIT_SMOKE_COMPLAINT","SMOKE_PROMPT_ACKNOWLEDGED","TOUR_COMPLETED","MAP_DRAG_END","dragEvt","center","zoom","SHOW_CUSTOMER_INTERACTION_STATUS_FORM","TOGGLE_FIND_BURNS_FORM","_ref10","FIND_ASSOCIATED_BURNS","_ref11","FIND_ASSOCIATED_BURNS_RESULTS","_ref12","ASSOCIATED_BURNS","_ref13","REMOVE_BURN_ASSOCIATION_SUCCESS","GEOCODE_CUST_INT_ADDRESS_SUCCESS","regionId","x","y","targetTypeMapState","getTileLinks","setTileLinks","getDashMsgs","setDashMsgs","DashboardTypes","TileLinks","AirQuality","BurnRestrictions","Helpful","Permit","StateLaw","Messages","Alert","Warning","Info","SET_TILE_LINKS","links","SET_DASH_MSGS","messages","geocode","setIsGeocoding","getTRSExtent","trsSuccess","geocodeSuccess","geocodeError","resetGeoCoordinate","clearGeocodeResult","clearTRSResult","getTrsByCoord","updateGeocodedLocation","geocodeLocationSection","resetGeolocatedLocation","geocodeAddressForm","GeoCoordinateTypes","GeocodeResult","IsGeocoding","TRSResult","TRSCodeResult","geocodedLocation","geocodingLocation","RESET_GEO_COORDINATE","GEOCODE_SUCCESS","result","TRS_SUCCESS","GEOCODE_ERROR","SET_IS_GEOCODING","CLEAR_GEOCODE_RESULT","CLEAR_TRS_RESULT","UPDATE_GEOCODED_LOCATION","region","trs","fireDistrict","county","GEOCODE_LOCATION_SECTION","RESET_GEOLOCATED_LOCATION","fileUploading","setSuccessfulUpload","resetFileUploading","FileTypes","uploading","successfulUpload","FILE_UPLOADING","isUploading","SET_SUCCESSFUL_UPLOAD","successful","RESET_FILE_UPLOADING","lookupData","checkedLookupData","downloadLookupData","clearLookupChecks","failure","updateRecord","updateRecordRequest","createRecord","clearError","clearAllErrors","logError","generalMessage","clearGeneralMessage","clearAllGeneralMessages","offlineMessage","clearOfflineMessage","cancelSubmit","apiSuccess","apiFail","donePreparingOffline","ApiTypes","isLoading","requestError","lookupDataChecked","offlineMessages","generalMessages","preparingOffline","offlinePrepared","FAILURE","occurredAtDate","errorId","getTime","errorMessage","occurredAt","CLEAR_ERROR","errorIdx","CLEAR_ALL_ERRORS","CHECKED_LOOKUP_DATA","setValues","CLEAR_LOOKUP_CHECKS","OFFLINE_MESSAGE","CLEAR_OFFLINE_MESSAGE","msgIdx","GENERAL_MESSAGE","CLEAR_GENERAL_MESSAGE","CLEAR_ALL_GENERAL_MESSAGES","DOWNLOAD_LOOKUP_DATA","DONE_PREPARING_OFFLINE","fetchAgencyData","fetchAgencyDataForMerge","getAllAgencies","createAgencyObject","createAgencyObjects","updateAgencyObject","createNewAgency","createAgency","deleteAgency","updateAgency","setAgencyId","resetAgencyId","saved","saving","clearSaveState","clearAllSaveState","verifyAgencyUser","mergeAgencies","convertPersonToAgency","mergePersonToAgency","AgencyTypes","isNew","FETCH_AGENCY_DATA","FETCH_AGENCY_DATA_FOR_MERGE","SET_AGENCY_ID","RESET_AGENCY_ID","SAVING","saveType","SAVED","CLEAR_SAVE_STATE","CLEAR_ALL_SAVE_STATE","activePersonId","deactivatePerson","getAllPeople","getAllLandowners","getAllAgents","getPerson","getLandownerInfo","getAgentInfo","getPersonLookupData","newPerson","createPerson","updatePerson","getAssignableUsers","applicationUsersSuccess","getAgentPhones","createLocalPhoneForPerson","createPersonPhone","deletePersonPhone","getAgentAddresses","createLocalAddressForPerson","createPersonAddress","deletePersonAddress","getAgentEmail","deletePersonEmail","createPersonEmail","updatePersonRegion","setPersonRegion","mergePeople","getDataForPeopleMerge","getPersonDataForMerge","getUnsubmittedRequests","setUnsubmittedRequests","PersonTypes","activePerson","isNewPerson","GET_PERSON","NEW_PERSON","ACTIVE_PERSON_ID","DEACTIVATE_PERSON","SET_UNSUBMITTED_REQUESTS","_ref3$requests","requests","burnRequestsPrompts","_ref4$activeOnly","userFetchStart","userFetchEnd","loginReceived","loginError","logout","destroyTokenAndResetState","userInfoRequest","userInfoSuccess","userInfoError","setGroups","checkAgentVerification","updateUserAgencyStatus","toggleNetworkNotifications","checkTokenExpiration","UserTypes","isAuthenticated","isFetching","token","userName","groups","isVerifiedAgent","networkNotificationsEnabled","USER_FETCH_START","USER_FETCH_END","LOGIN_RECEIVED","DESTROY_TOKEN_AND_RESET_STATE","USER_INFO_SUCCESS","USER_INFO_ERROR","SET_GROUPS","UPDATE_USER_AGENCY_STATUS","TOGGLE_NETWORK_NOTIFICATIONS","POST_BURN_ENDPOINT","getPostBurnsByRequestId","postBurnEndpoint","getPostBurnsByRequestIdSuccess","getPostBurnById","postBurnId","getPostBurnByIdSuccess","getPostBurnsByPermit","createPostBurn","createPostBurnRequest","postBurnObj","updatePostBurn","updatePostBurnRequest","postBurnRequestSuccess","postBurnRequestFail","cancelPostBurnSubmit","postBurnSubmitted","submittingPostBurns","setPostBurnRequestId","postBurnUseRequest","setPostBurnPermitId","setPostBurnPermitByNumber","setPostBurnId","initializePostBurnForm","postBurnLoadingComplete","postBurnLoading","setPostBurnPrompt","clearPostBurnPrompt","getPbPromptsForPermit","getPbPromptsForUser","PostBurnTypes","ActiveRequestId","ActivePermitId","ActivePostBurnId","PostBurnIsLoading","postBurnPrompt","SubmittingPostBurns","PostBurnUsesRequest","SET_POST_BURN_PERMIT_ID","SET_POST_BURN_REQUEST_ID","SET_POST_BURN_ID","POST_BURN_LOADING","POST_BURN_LOADING_COMPLETE","SET_POST_BURN_PROMPT","promptObjs","CLEAR_POST_BURN_PROMPT","CANCEL_POST_BURN_SUBMIT","idIdx","SUBMITTING_POST_BURNS","POST_BURN_SUBMITTED","POST_BURN_USE_REQUEST","useRequest","INITIALIZE_POST_BURN_FORM","getReports","reportsDoneLoading","setReports","downloadReport","ReportTypes","reportsLoading","reports","GET_REPORTS","SET_REPORTS","REPORTS_DONE_LOADING","getRules","updateRule","rulesLoading","rulesLoaded","ruleUpdating","ruleUpdated","ruleUpdateFailed","resetRuleLoadState","RuleTypes","GET_RULES","RULES_LOADED","UPDATE_RULE","RULE_UPDATE_FAILED","RULE_UPDATED","RESET_RULE_LOAD_STATE","clearObjectIds","setObjectOneId","setObjectTwoId","fetchingDataForMerge","MergeTypes","ObjectOneId","ObjectTwoId","isFetchingData","CLEAR_OBJECT_IDS","SET_OBJECT_ONE_ID","ObjectId","SET_OBJECT_TWO_ID","FETCHING_DATA_FOR_MERGE","_ref$isFetchingData","AddItemToCart","RemoveItemFromCart","EmptyCart","CartTypes","CartItemIds","ADD_ITEM_TO_CART","itemId","REMOVE_ITEM_FROM_CART","EMPTY_CART","appReducer","combineReducers","api","Map","ui","ApplicantInfo","BurnPermitInstructions","BurnPermitForm","BurnPermitList","BurnPermitPileGroups","BurnRequestDetail","BurnRequestList","PermitConditions","Calendar","GeoCoordinate","Dashboard","User","Files","Reports","Rules","Merge","Cart","rootReducer","REACT_APP_ANALYTICS_ENABLED","REACT_APP_SHOW_LOGGING","REACT_APP_ENABLE_REDUX_DEV_TOOLS","takeLatestActions","queue","defaultQueue","enqueue","actionIdx","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_effect","_action","resp","wrap","_context","prev","next","getState","headers","fetch","sent","ok","abrupt","stop","_x","_x2","discard","_callee2","_retries","_context2","_x3","_x4","_x5","_createOffline","createOffline","offlineConfig","persist","effectPayload","offlineMiddleware","middleware","offlineEnhanceReducer","enhanceReducer","offlineEnhanceStore","enhanceStore","persistConfig","transforms","createTransform","inboundState","outboundState","whitelist","storage","localForage","persistedReducer","persistReducer","pageViewMiddleware","trackPageView","page","REACT_APP_LANDOWNER_GROUP","REACT_APP_REGION_STAFF","REACT_APP_REGION_ADMIN","REACT_APP_SMOKE_STAFF","REACT_APP_SMOKE_ADMIN","REACT_APP_STATE_GOV_CUST","DNR_GROUP_SIDS","PERSON_TYPE_DNR_STAFF","PERSON_TYPE_GOV_CUST","PERSON_TYPE_PRIVATE","PERSON_TYPE_GOV_AGENT","PERSON_TYPE_AGENT","mapGroupToReadableName","group","checkedLookupDataSelector","propsSelector","filterSelector","idSelector","ormSelector","createSelectorOrm","ormByIdSelector","ormWithPropSelector","getValueOrDefault","def","addressMapper","IsLocal","phoneMapper","emailMapper","networkStateSelector","showLoadingSelector","appIsOnlineSelector","createSelector","online","permitByBurnPermitNumberSelector","toUpperCase","permitByIdSelector","permitIdAndSectionIdsByPermitIdSelector","permit","toRefArray","p","permitStatus","BurnPermitStatusXrefs","statusXref","orderBy","first","hasSignedPermit","toModelArray","isAutoApproved","StatusDescription","Status","permitStatusHistory","statuses","permitStatuses","isRevoked","signature","statusName","issuedStatus","newApplStatuses","BurnPermitApplicationStatusXrefs","b","permitApplicationStatuses","burnedAcresByPermitSelector","BurnedAcres","pbMap","set","values","burnedTonsByPermitSelector","directionsForSelectSelector","dirs","models","Abbrev","countiesForSelectSelector","counties","fireDistrictDepartmentsForSelectSelector","fireDistrictDepartments","locationQuartersSelectSelector","_ref14","locationQuarters","lq","permitLocationByIdSelector","_ref15","LegalDescriptionLocation","permitLocationLegalDesc","_ref16","locationAddress","_ref17","locationId","addr","addrById","addressTypeByNameSelector","_ref18","person","_ref19","_ref20","addressTypesSelectSelector","_ref21","addrTypes","contactMethodsForSelectSelector","_ref22","m","phoneTypesSelector","phoneTypes","equipmentTypeCheckboxSelector","byEmail","_ref23","category","useDesc","burnIgnitionTypesCheckboxSelector","duffTypeSelectSelector","_ref24","_ref25","duffTypes","daysOfWeekCheckboxSelector","fuelDiametersSelector","fuelsBurnTypes","fuelsInfoByIdSelector","_ref26","FuelsInfoId","fuel","ShowFuelsCalculator","BurnPermitFuelLoadingXrefs","getBurnPermitId","burnPermit","burnPermitAreaByIdSelector","area","burnTypesCheckboxSelector","countySelectSelector","forestTypesSelector","getDnrUsersForSelect","u","storedPersonIds","storedLandownerIds","storedAgentIds","alertMethodsSelector","idExists","PersonRegionXrefs","xref","AgencyXref","PersonAgencyXrefs","PersonAgencyXrefAgency","alertPrefs","Description","alertPreferencesSelect","getModelIdAttr","dbSet","modelByIdSelector","itemsByModelNameSelector","modelExists","modelsExist","getXrefIdsForModel","newModelSelector","newModel","getModelCount","count","getLatestDateByModelName","latestCreate","latestUpdate","latestCreateDate","currentModel","latestUpdateDate","modelValidationSchemaSelector","getValidationSchema","getModelEndpoint","userObjSelector","userSelector","user","userIsAuthenticated","userGroupsSelector","userIsSmokeStaff","userIsSmokeAdmin","userIsStateGovCust","userIsRegionStaff","userIsRegionAdmin","userIsSAW","userIsADFS","isSmokeStaff","isSmokeAdmin","isGovCust","isRegionStaff","isRegionAdmin","userIsSmokeMgmt","currentUserGroupsSelector","g","userNameSelector","getUserToken","userIsFetching","userNetworkNotifEnabled","userPersonIdSelector","userIsVerifiedAgent","userPersonModelSelector","userPersonTypeNameSelector","usersAgencyPaysByVoucher","agency","userIsGovAgencyType","personTypeName","isSAW","userIsAgentType","userIsPrivateType","userIsDnrStaffType","isADFS","userPersonIsGovCustType","isStateGovCust","userIsDNR","isDNRStaffType","userIsUnverifiedAgent","isAgent","isGovAgent","isSAWUser","authPropsSelector","isAdmin","isPrivate","paysByVoucher","IsLoadingUser","LoginError","userHasAddressesSelector","o","userHasPhonesSelector","userHasAgencySelector","userHasRegionSelector","profileStatusSelector","isPrivateType","isStateGov","hasAddrs","hasPhones","hasRegion","hasAgency","IsComplete","HasPersonType","HasContactMethod","HasPhones","HasRegion","HasAddresses","HasAgency","every","_marked2","select","put","_marked","downloadFile","fileName","link","createElement","download","appendChild","click","setTimeout","parentNode","removeChild","t0","showError","uploadFiles","files","_message","fileData","file","fileResp","responseBody","FormData","append","doFetch","finish","updateLocalModel","upsertLocalModel","_marked3","upsertLocalModels","_marked4","destroyLocalModel","_marked5","destroyLocalModels","_marked6","_marked7","_marked8","serverHasNewerData","createLocalModel","_context3","_context4","_context5","_context6","xrefIds","_context7","_context8","serverData","localModelCount","latestAppStatusDate","latestServerAppStatusCreateDate","latestServerAppStatusUpdateDate","hasNewStatuses","_context9","fetchAndCheck","checkModelConcurrency","extractPayload","requestBody","reqBody","userToken","response","statusCode","Authorization","t1","POST_LOG_URL","res","statuscode","requestUrl","latestModelDate","lookupDataRequest","forceCheck","_callee3","checkedData","getLookupData","_ref3$forceCheck","_callee5","stackFrames","StackTrace","fromError","extractError","_context10","json","Response","_context11","_context12","apiResponseIsAuthorized","auth","ApiSagas","takeEvery","LOOKUP_DATA","UPDATE_RECORD","_callee4","_yield$select","CANCEL_SUBMIT","action_type","UPDATE_RECORD_REQUEST","keyName","keyValue","ApiActions","LOG_ERROR","errorInfo","localState","requestObj","postLogResp","API_SUCCESS","API_FAIL","createAuthSelector","userMakesPayments","allowed","userCanViewAdminMenu","userCanCreateNewPermit","userCanCreateNewRequest","userCanUpdatePersonRegion","userCanViewPersonRegion","userCanVerifyAgents","userCanChangeAlertPrefs","userCanViewAgencyAuitData","userCanSearchByAssignee","userCanViewAppUserData","userNeedsLandownersOffline","userCanEditVerifiedAgentPersonType","userCanEditAnyAgency","userCanChangeSMDecisionStatus","isSmokeMgmt","userOnlySelectsInternalType","userOnlySelectsGovCustType","userOnlySelectsPublicTypes","userCanCreateNewPeople","userCanManageAgentPeople","userCanManageAllPeople","userCanManageLandowners","agencyStateSelector","agencyCurrentIdSelector","agencySavedSelector","agencySavingSelector","agencyIds","userCreatedAgency","currentAgencySelector","agenciesForTableSelector","agenciesForSelectSelector","agencySimpleSelector","allAgencies","allAgenciesForMerge","agencies","Label","Required","agencyForMerge","agencyObj","agenciesForMergeSelect","agencyPaysByVoucherByPermitId","agencyAutoRegionApprovalByPermitId","agentsForSelectSelector","agent","people","agents","agentXrefsSelector","xrefs","fail","getAgencyObject","AGENCY_ENDPOINT","AGENCY_MODEL_NAME","forceRefreshFromServer","basicInfo","agencyEndpoint","oldXrefs","storedAgencyIds","incomingIds","agenciesToDelete","difference","newAgency","modelType","keyProp","_ref5$basicInfo","_callee6","_response","contactReqs","fetchAgency","lookupDataModel","_yield$call","modelIdAttr","fork","_callee7","getAgency","_callee13","_yield$call6","_context16","AgencySagas","takeLatest","GET_ALL_AGENCIES","CREATE_NEW_AGENCY","CREATE_AGENCY","emsg","DELETE_AGENCY","request","UPDATE_AGENCY","_callee10","updateEndpoint","_yield$call3","_context13","MERGE_AGENCIES","mergedAgencyId","_callee11","_yield$call4","_context14","MergedAgencyId","CREATE_AGENCY_OBJECT","CREATE_AGENCY_OBJECTS","phone","_callee8","UPDATE_AGENCY_OBJECT","_callee9","modelEndpoint","_yield$call2","VERIFY_AGENCY_USER","personAgencyXrefId","_callee12","_yield$call5","_context15","burnNoticeSubscriberStateSelector","mapBurnNoticeSubscriberForDataTable","burnNoticeSubscriber","activeBurnNoticeSubscriberFormSelector","burnNoticeSubscriberSelector","selectBurnNoticeSubscriberIds","DEFAULT_SUBSCRIBER_PHONE","phones","activeCount","total","burnNoticeSubscriberPhoneSelector","burnNoticeSubscriberState","activePhones","burnNoticeSubscriberEmailByIdSelector","_BurnNoticeSubscriber","burnNoticeSubscriberInactiveData","getDataTablesColumns","handleEmail","fetchBurnNoticeSubscriber","PHONE_MODEL_NAME","BURN_NOTICE_SUBSCRIBER_MODEL_NAME","checkBurnNoticeSubscribersConcurrency","latestBurnNoticeSubscriberDate","concurrencyEndpoint","concurrencyResponse","isConcurrent","storedBurnNoticeSubscribers","incomingBurnNoticeSubscriberIds","burnNoticeSubscribersToDelete","burnNoticeSubscriberResponse","getBurnNoticeSubscriberPhones","localPhones","localPhoneIds","phoneIds","phoneIdFilter","fromBurnNoticeSubscriberId","toPhoneId","emailId","BurnNoticeSubscriberSagas","GET_ALL_BURN_NOTICE_SUBSCRIBERS","_ref$forceRefreshFrom","CREATE_BURN_NOTICE_SUBSCRIBER","formattedBurnNoticeSubscriber","DELETE_BURN_NOTICE_SUBSCRIBER_PHONE","phoneId","CREATE_LOCAL_PHONE_FOR_BURN_NOTICE_SUBSCRIBER","newPhone","CREATE_BURN_NOTICE_SUBSCRIBER_PHONE","createdPhone","BurnNoticeSubscriberPhoneXrefId","BurnNoticeSubscriberPhoneXrefPhone","BurnNoticeSubscriberPhoneXrefPhoneId","CREATE_BURN_NOTICE_SUBSCRIBER_EMAIL","burnNoticeSubscriberEmailEndpoint","DELETE_BURN_NOTICE_SUBSCRIBER_EMAIL","deletedId","UPDATE_BURN_NOTICE_SUBSCRIBER","getAllRegions","getRegion","RegionTypes","GetAllRegions","getRegionContactData","REGION_ENDPOINT","REGION_MODEL_NAME","regionsOnly","ormObjs","objs","_objs$i","RegionEmail","RegionAddress","RegionPhone","urlMod","urlId","RegionSagas","GET_ALL_REGIONS","GET_REGION","BURN_PERMIT_LOCATION_ENDPOINT","BURN_PERMIT_LOCATION_MODEL_NAME","getLocationLookupData","getBurnLocationInfo","updateBurnPermitLocationLegalDesc","updateBurnPermitLocationLegalDescRequest","burnPermitLocation","updateBurnPermitLocationLatLong","updateBurnPermitLocationLatLongRequest","updateBurnPermitLocationAdditionalInfo","updateBurnPermitLocationAdditionalInfoRequest","createBurnLocationAddress","deleteBurnLocationAddress","processBurnLocationAddressRequest","locationAddressRequestSuccess","BurnPermitLocationTypes","getBurnLocationLookupData","downloadBurnLocationInfo","locationAddressSuccess","updateLocationForAddress","cancelRequest","submitOfflineLocationEdits","ADDRESS_MODEL_NAME","LOCATION_ID_NAME","BURN_PERMIT_SEARCH_MODEL_NAME","burnPermitLocationId","permitLocationUrl","permitLocationResp","downloadResp","_downloadResp$respons","permitLocations","addresses","addrs","locs","_i","processBurnLocationAddress","_yield$select2","addressId","localAddress","PROCESS_BURN_PERMIT_LOCATION_ADDRESS_REQUEST","BurnPermitLocationActions","burnPermLoc","pathMod","UPDATE_BURN_PERMIT_LOCATION_LEGAL_DESC_REQUEST","serverId","permitLocationRef","legalDescUrl","locInfoUrl","locReqs","latLongUrl","locAddrUrl","Submit","_fields","updateLocInfo","BurnPermitLocationSagas","GET_BURN_LOCATION_INFO","CREATE_BURN_LOCATION_ADDRESS","DELETE_BURN_LOCATION_ADDRESS","LOCATION_ADDRESS_REQUEST_SUCCESS","UPDATE_BURN_PERMIT_LOCATION_LEGAL_DESC","_yield$select3","updatedLocationInfo","searchUpdate","LegalDescriptionSecion","LegalDescriptionDirection","UPDATE_BURN_PERMIT_LOCATION_LAT_LONG","_yield$select4","UPDATE_BURN_PERMIT_LOCATION_ADDITIONAL_INFO","_yield$select5","GET_LOCATION_LOOKUP_DATA","signatureState","permitSignatureState","signatureByPermitId","permitApplicationSignature","appIsSigned","doc","permitBeingReissued","signatureCallbackState","applicationSignatureEnvelopeId","permitSignatureEnvelopeId","userMustSignPermitToSubmit","mustSign","userMustUploadPermitToSubmit","userCanAutoSubmitPermit","canAutoSubmit","userMustSignIssuedPermit","mustPay","userCanEditOrders","payWithVoucher","userCanRefundOrders","userCanSeeInternalOnly","userCanEditPermitStatus","userCanEditPermitConditions","userSetsPermitDatesWhenSigning","userCanSelectPermitLandowner","userCanEditLegacyPermitApplInfo","userCanEditUGA","userCanEditLocationPastSubmission","userCanRecordCashCheckPayment","userCanBeAssignedPermits","userCreatesGovAgentPermits","userCanReviewFHExemption","downloadBurnPermitSignatures","signatureRequestPreflight","confirmSignaturePreflight","handleSignatureResponse","BURN_PERMIT_SIGNATURE_ENDPOINT","setLoadingDocuSignUrl","_ref$verify","verify","_ref$disableLoading","disableLoading","permitAppSignaturesUrl","permitAppSignaturesResp","localSignature","permitSignature","isEqual","verifyPermitSignature","downloadSignaturesUrl","envelopeId","permitApplicationSignatureUrl","applicationSignatureResp","updateNextSteps","permitSignatureUrl","permitSignatureResp","docIdIsMissing","signatureType","docType","errorMsg","DocuSignUrl","_error","_permitSignatureResp$2","shouldUpdateSignature","shouldUpdateDocs","BurnPermitSignatureSagas","GET_BURN_PERMIT_SIGNATURES","PREVIEW_PERMIT","permitPreviewResp","SIGN_PERMIT","validDate","expirationDate","setDates","SIGN_PERMIT_APPLICATION","force","permitApplicationSignatureResp","pop","shift","CONFIRM_APPLICATION_SIGNATURE","CONFIRM_PERMIT_SIGNATURE","_permitSignatureResp$","_BurnPermitSignature","BURN_PERMIT_FUEL_MODEL_NAME","BURN_PERMIT_FUEL_ENDPOINT","getBurnPermitFuelsInfo","updateBurnPermitFuels","updateBurnPermitFuelsRequest","burnPermitFuel","calcFee","fuelsRequestSuccess","BurnPermitFuelsTypes","getFuelsLookupData","upsertFuelsData","downloadBurnPermitFuelsInfo","updateBurnPermitFuelsSuccess","submitOfflineFuelsEdits","burnPermitFuelId","permitFuelsUrl","permitFuelsResp","fuels","_permitFuelsResp$resp","fuelLoadings","ignitionTypes","_loop","delegateYield","permitFuelRef","fuelResp","BurnPermitFuelsSagas","GET_BURN_PERMIT_FUELS_INFO","UPDATE_BURN_PERMIT_FUELS","UPDATE_BURN_PERMIT_FUELS_REQUEST","BurnPermitFuelsActions","FUELS_REQUEST_SUCCESS","permitForestHealthData","problemType","ForestHealthExemptionApprovalBy","problemTypesSelector","permitNeedsForestHealthDoc","hasForestHealthBurnReason","burnPermitStateSelector","permitSearchSelector","permitSearchByIdSelector","activeBurnPermitIdSelector","burnPermitSearchParamSelector","burnPermitSearchDataSelector","activeBurnPermitStateSelector","permitState","activePermitId","activeBurnPermitSelector","permitsOfflineSelector","_searchParams","toLocaleLowerCase","permitApplicationIsSigned","isSigned","permitApplicationSignedByDnr","signedByDnr","latestAppStatusName","latestAppStatusNameByPermitId","permitIsPending","permitIsSubmitted","permitByIdIsSubmitted","permitIsApproved","permitIsDenied","permitIsIssued","permitIsExtended","latestPermitStatus","permitApplicationIsPaid","permitHasPermitSignatures","applicant","dnrSubmission","permitPeopleIds","permitEstimatedFee","permitTotalPermitTonnage","permitDaysSelector","permitApplicationDocuments","statusHistory","latestStatus","submittedStatus","approvedStatus","ReadOnly","ExpirationDate","h","docIsReadOnly","applicationSignatureDocuments","docs","permitSignatureDocuments","cert","documentTypesForSelect","pileTypeSelected","permitNeedsTonnageCalculationDoc","hasPileTypeSelected","permitNeedsPileLocDoc","requiresPileLocationMap","hasMultipleBurnTypes","documentsSectionIsValid","needsForestDoc","needsTonnageDocs","needsPileLocDoc","validationInfo","permitIsActiveSelector","currentStatus","isBefore","msg","expDate","suspStart","startIsValid","suspEnd","endIsValid","permitDates","RevokedDate","RevokedComment","ValidDate","RevokeStatus","permitIsSuspendedSelector","permitIsRevokedSelector","_","__","permitIsExpiredSelector","permitIsDeniedSelector","permitMapDataSelector","layerTitle","idField","geometry","latitude","longitude","permitSummaryDataComplete","allDataExists","Burner","burnPermitNumberById","burnTypesByBurnPermitId","userIsBurnerOrAgent","permitApplicationStatus","_ref27","personIsGovAgent","burnerIsGovAgentType","agentIsGovAgentType","activePermitIsLegacy","isGovAgentPermit","burnerIsGovAgent","agentIsGovAgent","permitIsInUGA","_ref28","permitIsForForestHealth","_ref29","isForestHealth","permitHasSignedPermitDoc","_ref30","isExtended","permitsByIds","_ref31","BurnPermitIds","arrayValuesAreUnique","checkAllPermitsBelongToSameBurnerOrAgent","_ref32","allSameBurner","allSameAgent","permits","burnerIds","agentIds","hasIssuedPermits","_ref33","autoAgency","shouldShowApplicationNextSteps","_ref34","isPending","isPaid","isSubmitted","isApproved","isDenied","isIssued","shouldShowPermitNextSteps","signatures","mustSignPermit","hasSignedDoc","permitSectionIsActive","sectionId","permitCanAcceptDocumentUploads","isExpired","BURN_PERMIT_PILE_GROUP_VALIDATION_SCHEMA","pileGroupState","activePileGroupId","pileGroupById","PILE_SHAPE_CATEGORIES","pileShapeCategories","HAND_PILE_SPECIES","handPileSpecies","PILE_TYPE","pileTypes","PILE_QUALITY","pileQuality","PACKING_RATIO","packingRatio","speciesWoodDensities","pileTypeIsChecked","pileGroups","lookupDataSelector","PileShapes","PileTypes","PackingRatios","SpeciesWoodDensities","pileGroupInputMapper","groupNamePrefix","PileTypeName","PileShapeName","PileQualityName","PackingRatioName","HandPileSpeciesName","TotalCompositionPercent","parseFloat","calculatorResultsMapper","pileGroupsByPermitId","burnPermitPileGroupsByPermitIdSelector","Network","PileGroupState","PileBurnTypeIsChecked","PermitArea","canUpload","Validate","ActiveBurnPermitPileGroup","CalculatorResults","groupsAreValid","needsPileGroups","needsCalculation","isExemptArea","TonnageIsEstimated","isValidSync","compareFileNames","files1","files2","fileNamesToUpload","uniqueFileNamesToUpload","repeatingNames","currentFilesNames","errMessage","downloadPileInfo","submitOfflinePileEdits","requestFailed","BURN_PERMIT_PILE_GROUP_MODEL_NAME","burnPermPileResp","pileGroup","DELETE_LOCAL_PILE_GROUPS","localPermitId","serverPermitId","pileResp","localPileGroup","updateTonnageAndFee","isEmpty","BurnPermitPileGroupSagas","GET_BURN_PILE_GROUP","GET_BURN_PILE_GROUPS","CREATE_BURN_PERMIT_PILE_GROUP","CREATE_BURN_PERMIT_PILE_GROUP_REQUEST","BurnPermitPileGroupActions","UPDATE_BURN_PERMIT_PILE_GROUP","localBurnPermitPileGroup","UPDATE_BURN_PERMIT_PILE_GROUP_REQUEST","UPDATE_BURN_PERMIT_PILE_GROUP_SUCCESS","ESTIMATE_CONSUMED_TONNAGE","ADD_LOCAL_PILE_GROUP","DELETE_PILE_GROUP","DELETE_BURN_PERMIT_PILE_GROUP_SUCCESS","UPLOAD_BATCH_PILES","receivedPiles","currentFiles","sagas","updateFee","DELETE_ALL_PILE_GROUPS","conditionStateSelector","conditionErrorsSelector","activePermitIdSelector","conditionValuesNewForBurnPermitSelector","conditionXrefs","BurnPermitConditionXrefs","valueObj","condition","otherDesc","BurnPermitEquipmentConditionXrefs","OtherConditionFormatted","startsWith","endsWith","conditionsSelector","query","contactConditionSelector","mapContactCondition","contact","mapContactConditionForFormik","contacts","contactConditionXrefForPermitSelector","contactCondition","contactConditionForPermitSelector","BurnPermitRequiredContactConditions","burnPermitConditionsSelector","conditions","ChildConditions","conditionFieldToNameMapSelector","mapFieldToName","permitConditionNameByIdSelector","permitConditionByNameSelector","conditionValueKeySelector","mapConditionValueKey","upsertConditonResponse","getConditionLookupData","downloadPermitConditions","saveContactConditions","mapXref","submitConditionsForPermit","parseErrorResponse","dayOfWeekXrefs","directionXrefs","equipmentXrefs","contactConds","_BurnPermitConditionXrefId","_BurnPermitConditionXrefId2","_BurnPermitConditionXrefId3","newXref","burnPermDetailResp","updateIssuedContacts","contactXrefResp","newContacts","oldXref","UpdateIssuedContacts","conditionValue","_extractContentStateV","_extractContentStateV2","plainText","formatted","otherEquipDesc","chosenEquips","equipTypes","otherEquipId","mapped","updateIssuedConditions","ids","burnPermDetailUrl","eobj","ConditionXrefs","UpdateIssuedConditions","validationErrors","errorObj","idMatch","_keys","found","BurnPermitConditionSagas","GET_PERMIT_CONDITIONS","SET_ACTIVE_PERMIT_CONDITIONS","activeId","SET_CONTACT_CONDITIONS","contactObj","getBurnPermitSiteInfo","updateBurnPermitSite","updateBurnPermitSiteRequest","updateBurnPermitSiteSuccess","BurnPermitSiteTypes","getPermitSiteLookupData","downloadBurnPermitSiteInfo","submitOfflineSiteEdits","upsertBurnPermitSite","replaceAllSiteEquipment","replaceAllReferenceDirections","BURN_PERMIT_SITE_ENDPOINT","BURN_PERMIT_SITE_MODEL_NAME","EQUIPMENT_XREF_MODEL_NAME","burnPermitSiteId","permitSiteUrl","permitSiteResp","getBurnPermitSelector","getBurnPermitUnits","_permitSiteResp$respo","permitSites","equipXrefs","burnDays","referenceDirections","site","BurnPermitSiteReferenceDirections","burnPermitSite","permitResp","updatedPermit","getBurnPermitSaga","permitSiteRef","siteResp","permitSite","refDirs","BurnPermitSiteSagas","GET_BURN_PERMIT_SITE_INFO","UPDATE_BURN_PERMIT_SITE","localBurnPermitSite","updatedPermitSiteInfo","UPDATE_BURN_PERMIT_SITE_REQUEST","BurnPermitSiteActions","UPDATE_BURN_PERMIT_SITE_SUCCESS","userCanBypassSignature","userCanEditAnyInfoRequiredRequest","userSeesDetailedStatus","userCanEnterAnyIgnDate","userSeesPostBurnPrompt","userSeesInternalReqStatus","userCanAssignBurnRequest","userCanChangeRequestStatus","userMustEnterStatusComment","userCanOverrideDecisions","userCanMakeSMDecisions","userIsDivisionApprover","personStateSelector","sessionSelector","personMapper","mapPersonForDataTable","personTypeMapper","_getPersonType","pType","_personIsDnrStaffType","getPersonTypeForPersonId","personIsAgentOrAgencyPerson","agentPersonTypeIds","personTypesForPerson","types","personTypes","_getDNRPersonTypes","_personIsGovCustType","_getGovCustPersonTypes","_getPublicPersonTypes","personIsDnrSelector","getPersonTypeIdByName","typeName","qs","_getPersonTypeIdByName","personTypesByPermissionSelector","internalOnly","govCustOnly","publicOnly","landownerSelector","privatePersonType","personTypeId","allPeople","landowners","burners","dnrPersonTypeId","peopleForMergeSelect","allPeopleForMerge","personData","Readonly","activePersonFormSelector","personModelSelector","personSelector","mappedPerson","personPhoneSelector","personState","personRegionXrefSelector","personRegions","MakesSmokeManagementDecisions","userMakesSMDecisions","isAuthorized","personAgencyXrefSelector","personAlertPrefXrefSelector","personAddressesSelector","activeAddresses","personForMerge","personObj","Permits","showWarning","sig","baseMessages","personEmailSelector","_email","getPersonDataTableCols","personInactiveData","getPersonRegions","fetchPerson","PERSON_MODEL_NAME","DNR_ENDPOINT","BURN_REQUEST_SEARCH_MODEL_NAME","users","dnrUserCount","dnrGroups","dnrUsersFilter","concurrencyResp","checkPeopleConcurrencyByType","personType","latestPersonDate","storedPeople","incomingPersonIds","peopleToDelete","username","getAgent","permitAndRequestSearch","_ref8$includeLookupDa","includeLookupData","personResponse","reqs","canViewUserData","userResp","personAgencyXrefs","isCurrentUser","clearPrevious","getPersonBurnPermits","getPersonBurnRequests","t2","ConfirmedDate","t3","getPersonAddresses","getPersonPhones","_callee14","_context18","_callee15","_yield$call9","_context19","fromPersonId","_callee16","_context20","_callee17","_yield$call10","localAddrs","localAddrIds","addrIds","addrIdFilter","_context21","toAddressId","_yield$call11","regionXrefs","_context22","_callee18","_context23","_callee27","_context32","_yield$call14","_context33","_context34","_callee28","_yield$all","_yield$all2","landownerPermits","agentPermits","_context35","getPersonsPermitDocuments","_callee29","_yield$all3","_yield$all4","landownerRequests","agentRequests","_context36","_context37","_callee30","_context38","checkPersonBurnRequests","_ref28$personId","_callee31","_context39","PersonSagas","APPLICATION_USERS_SUCCESS","GET_ALL_PEOPLE","GET_ALL_LANDOWNERS","GET_ALL_AGENTS","GET_LANDOWNER_INFO","GET_AGENT_INFO","GET_AGENT_EMAIL","GET_AGENT_ADDRESSES","GET_AGENT_PHONES","GET_PERSON_LOOKUP_DATA","GET_ASSIGNABLE_USERS","GET_DATA_FOR_PEOPLE_MERGE","GET_PERSON_DATA_FOR_MERGE","CONVERT_PERSON_TO_AGENCY","GET_UNSUBMITTED_REQUESTS","CREATE_PERSON","formattedPerson","CREATE_LOCAL_ADDRESS_FOR_PERSON","_callee23","newAddress","_context28","DELETE_PERSON_ADDRESS","_callee20","_yield$call13","_context25","CREATE_PERSON_ADDRESS","_callee24","createdAddress","_context29","PersonAddressXrefId","PersonAddressXrefAddress","PersonAddressXrefAddressId","DELETE_PERSON_PHONE","_callee19","_yield$call12","_context24","CREATE_LOCAL_PHONE_FOR_PERSON","_callee21","_context26","CREATE_PERSON_PHONE","_callee22","_context27","PersonPhoneXrefId","PersonPhoneXrefPhone","PersonPhoneXrefPhoneId","CREATE_PERSON_EMAIL","_callee25","personEmailEndpoint","_context30","DELETE_PERSON_EMAIL","_callee26","_context31","UPDATE_PERSON","MERGE_PEOPLE","mergedPersonId","MergedPersonId","UPDATE_PERSON_REGION","makesDecisions","_yield$call7","_yield$call8","_context17","SET_PERSON_REGION","applInfoStateSelector","applInfoAgencyIdSelector","applInfoAgentIdSelector","applInfoBurnerIdSelector","activePermitBurnerSelector","activePermitAgentSelector","activePermitAgencySelector","selectedContactData","applInfoMailToSelector","applInfoBurnerSelector","applInfoAgentSelector","applInfoAgencySelector","applInfoFormBurnerSelector","activeBurnerId","activeBurner","permitBurner","_selectedContactData","BurnerName","applInfoFormAgentSelector","activeAgentId","activeAgent","permitAgent","mapAgency","applInfoFormAgencySelector","activeAgencyId","activeAgency","permitAgency","personAddressLookup","personAddresses","personPhoneLookup","personPhones","personEmailLookup","emails","agencyAddressSelector","agentAddressesSelector","PersonAddresses","burnerAddressesSelector","agentPhonesSelector","PersonPhones","agencyPhoneSelector","burnerPhonesSelector","agentEmailSelector","agencyEmailSelector","burnerEmailSelector","burner","mapBurnerOrAgent","mappedEmail","mappedAddresses","mappedPhones","applicantInfoBurnerSelector","applicantInfoAgentSelector","Verified","applicantInfoAgencySelector","permitApplInfoSelector","permitForApplicantInfoSelector","mailTo","modifiedPermit","getPersonContactData","downloadApplicantInfo","getAllPeopleLookupData","setSelectedAgency","BURN_PERMIT_MODEL_NAME","personReqs","spawn","xrefResp","_xrefResp$responseBod","addressXrefs","phoneXrefs","alertPrefsXrefs","agencyXrefs","PersonAddressXrefPersonId","PersonPhoneXrefPersonId","appStatus","forceRefresh","BurnPermitApplicantInfoSagas","_yield$select6","_yield$select7","UPDATE_APPLICANT_INFO","info","localBurnPermit","updatedPermitInfo","updateSearchObj","SET_APPLICANT_INFO","execWithLoading","mainSaga","catchSagas","finallySagas","orderState","mapBurnPermitOrderXref","Tonnage","mapOrder","order","appDetail","orderStrings","regionString","permitNumberString","BurnPermitOrderXrefs","_xrefs$first","mapOrderStrings","CheckNumber","PaymentAmount","VoucherNumber","BurnPermitRegions","BurnPermitNumbers","TotalTonnage","ordersSelector","orderHasPaymentSelector","orderId","orderByIdSelector","orderByPermitIdsSelector","orderIdForActivePermitSelector","orderHasIssuedPermit","BurnPermits","permitStatusIds","issuedStatusId","orderEligibleForVoucherPayment","permitsAreEligible","getBurnPermitOrders","BURN_PERMIT_ORDER_ENDPOINT","burnPermitsOrdersResp","getOrderForBurnPermit","_burnPermitsOrdersRes","localOrder","Order","permitReqs","secondaryReqs","personIds","_permits$i","bLen","BurnPermitOrderSagas","GET_ORDERS","CREATE_BURN_PERMIT_ORDER","permitAppsOnOrder","_error2","GET_BURN_PERMIT_DETAIL_FOR_CART","siteInfoResp","_permitResp$responseB","burnerResp","agentResp","agencyResp","GET_BURN_PERMIT_ORDER_DETAIL","UPDATE_BURN_PERMIT_ORDER","burnPermitOrder","REMOVE_PERMIT_FROM_ORDER","DELETE_ORDER","appState","appStateSelector","HistoryLength","historyLength","lastRouteSelector","routeEntry","appVersionSelector","appHistorySelector","returnUrlSelector","getStatusLookupData","downloadBurnPermitStatusHistory","downloadPermitLookupData","_marked9","submitSuspension","_marked10","_marked11","deleteLocalPermit","profile","personInfo","permitProps","newPermit","appStatuses","pendingStatusId","pendingStatusXref","BurnPermitFormActions","localAreaId","localLocationId","localSiteId","localFuelId","submitOfflineAreaEdits","permitStatusHistoryUrl","applicationStatusHistoryUrl","permitStatusResponse","applicationStatusResponse","serverPermitStatuses","serverAppStatuses","_permitStatusResponse","burnPermitNumber","_ref7$updateFee","_ref7$forceReload","forceReload","_burnPermDetailResp$r","hasNewData","_ref8$forceReload","userIsDnr","showAppNextSteps","downloadPermitsResp","BurnPermitListActions","downloadBurnPermitAreaInfo","_ref9$disableLoading","suspensionComment","mappedUnits","unitName","BurnPermitSagas","GET_BURN_PERMIT_STATUS_HISTORY","SUBMIT_APPLICATION_STATUS","statusValues","putAppStatusUrl","_applicationStatusRes","burnPermitApplicationStatus","DELETE_APPLICATION_STATUS","deleteEndpoint","DELETE_PERMIT_STATUS","putPermitStatusUrl","appIsValidUrl","appIsValidResp","appIsValid","SECTION_IDS","SAVED_SECTIONS","sectionIds","GET_BURN_PERMIT","AGENCY_SUBMIT_BURN_PERMIT","appSubmittedUrl","GET_PERMIT_FILES","UPLOAD_PERMIT_FILES","createSignature","UPDATE_SUSPENSION","CLEAR_SUSPENSION","EXTEND_PERMIT","PermitExtended","REVOKE_PERMIT","revokeData","UNDO_REVOCATION","UNLOCK_APPLICATION","DOWNLOAD_PERMIT_FILE","downloadUrl","_fileName","fileExt","downloadFileName","lastIndexOf","_response$responseBod","fileCode","DELETE_PERMIT_FILE","_ref14$uploadAnyway","currAppStatus","isPendingApp","docTypes","isMailedApp","DELETE_APPLICATION","CREATE_PERMIT_APPLICATION_REQUEST","DELETE_APPLICATION_SUCCESS","COPY_APPLICATION","CREATE_PERMIT_APPLICATION","CREATE_PERMIT_APPLICATION_SUCCESS","CHECK_IF_FILES_ARE_ALREADY_ATTACHED","resps","Exists","BURN_PERMIT_AREA_ENDPOINT","getBurnAreaInfo","updateBurnPermitArea","updateBurnPermitAreaRequest","burnPermitArea","updateBurnPermitAreaSuccess","BurnPermitAreaTypes","PERMIT_SEARCH_MODEL_NAME","PERMIT_AREA_MODEL_NAME","burnPermitAreaId","burnPermitAreaInfoUrl","burnPermAreaResp","permitAreaRef","BurnPermitAreaSagas","GET_BURN_AREA_INFO","UPDATE_BURN_PERMIT_AREA","burnPermitAreaInfo","updatedAreaInfo","UPDATE_BURN_PERMIT_AREA_REQUEST","BurnPermitAreaActions","UPDATE_BURN_PERMIT_AREA_SUCCESS","requestDownloadedCount","burnRequestsSelector","searchStateSelector","burnRequestSearchParamSelector","burnRequestSearchDataSelector","burnRequestsOfflineSelector","MultiDayBurn","mapBurnRequest","BurnPermitRequestLogNumber","burnRequestByIdSelector","burnRequestModelByIdSelector","getPermitSummaryForRequest","ProblemType","ForestHealthExemptProblemTypeName","permitIsPileBurnOnly","getBurnRequestStatusIdByName","burnRequestStatuses","burnRequestStatus","BurnRequestRequestStatus","burnRequestStatusHistory","requestStatusXrefs","burnRequestCancellationReasonsForSelect","reasons","burnRequestMapDataSelector","RequestedAcres","RequestedTons","burnRequestHasPostBurn","PostBurns","pb","burnRequestStatusObjSelector","statusObj","IsCancelled","IsSubmitted","IsApproved","IsInfoRequired","IsUnderReview","IsLocked","IsDenied","burnRequestIsApproved","burnRequestInPersonsRegion","reqId","permitRegionId","canAccessBurnReq","burnReq","personRegion","burnRequestRegion","burnRequestValSchemaSelector","reqCanSubmitWithoutSignature","canBypass","postBurnStateSelector","submittingPostburnsSelector","activePostBurnIdSelector","localPostBurnByPermitIdSelector","activePostBurnModelSelector","postBurn","activePostBurnIsLocal","postBurnByIdSelector","activePostBurnRequestIdSelector","activePostBurnRequestModelSelector","burnRequest","activePostBurnRequestSelector","activePostBurnPermitIdSelector","activePostBurnPermitModelSelector","postBurnByActivePermitRequest","postBurnPromptSelector","postBurnLoadingSelector","activePostBurnIds","formatTime","time","fmtTime","postBurnDDLSelector","allBurnRequests","BurnRequests","BurnRequestStatusXrefs","BurnPermitPile","isPileType","pileCount","pileString","noReqPostBurnQuery","burnRequests","Group","burnDetails","reportDate","ignitedDate","noRequestGroup","nrpb","postBurnByRequestIdSelector","pmt","TotalPileConsumedTons","mapPostBurn","haveRequestDataForPostBurn","havePermitDataForPostBurn","preflight","setOrCreateActivePostBurn","getPostBurnStatusesForUser","downloadPostBurns","getBurnPermitInfoForPostBurn","POST_BURN_MODEL_NAME","PostBurnActions","AppActions","destroyLocalPostBurns","upsertPostBurns","localPostBurn","getPostBurnPrompts","activatePostBurnPermitByNumber","_ref5$number","getBurnRequestsForPermit","_ref7$permitId","_ref7$permitNumber","objToCreate","burnRequestUrl","burnRequestResponse","ack","_postBurn","getBurnRequestInfoWrapper","getBurnRequestAction","BurnRequestDetailActions","PostBurnSagas","_ref9$burnPermitId","_ref9$burnRequestId","_ref9$postBurnId","activeIds","CREATE_POST_BURN_REQUEST","GET_POST_BURNS_BY_PERMIT","SET_POST_BURN_PERMIT_BY_NUMBER","_ref6$number","CREATE_POST_BURN","POST_BURN_REQUEST_SUCCESS","POST_BURN_REQUEST_FAIL","UPDATE_POST_BURN","GET_PB_PROMPTS_FOR_USER","GET_POST_BURNS_BY_REQUEST_ID_SUCCESS","GET_POST_BURN_BY_ID_SUCCESS","getForestHealthData","createForestHealthData","updateForestHealthData","ForestHealthTypes","FOREST_HEALTH_EXEMPT_MODEL_NAME","PROBLEM_TYPE_XREF_MODEL_NAME","forestHealthId","permitForestHealthUrl","permitForestHealthResp","forestHealthExempt","upsertForestHealthData","typeXrefs","ForestHealthSagas","GET_FOREST_HEALTH_DATA","CREATE_FOREST_HEALTH_DATA","forestHealthData","requestData","localForestHealthExempt","newForestHealthExempt","UPDATE_FOREST_HEALTH_DATA","exemptId","getBurnRequestLookupData","submitLocalRequest","createLocalStatus","downloadBurnRequests","showBurnReqLoading","hideBurnReqLoading","goToRequestId","upsertSearchRequestModel","BURN_REQUEST_MODEL_NAME","BURN_REQUEST_DOWNLOAD_ENDPOINT","BURN_REQUEST_SEARCH_MODEL","_burnPermit","submittedRequest","requestStatuses","burnRequestInfo","_ref7$submit","submit","BurnDays","BurnRequestBurnDaysXref","GET_MY_BURN_REQUESTS","StatusName","dateAsJson","BurnRequestListActions","delay","_yield$select8","burnPermitSearch","BurnRequestDetailSagas","SEARCH_BURN_REQUESTS_SUCCESS","GET_BURN_REQUEST_INFO","GET_BURN_REQUEST_SUCCESS","GET_BURN_PERMIT_INFO","GET_BURN_REQUEST_STATUS_HISTORY","CREATE_REQUEST","SAVE_REQUEST","SUBMIT_REQUEST","DELETE_BURN_REQUEST","SUBMIT_REQUEST_STATUS","burnRequestResp","DELETE_REQUEST_STATUS","burnRequestStatusXrefId","CANCEL_BURN_REQUEST","localBurnReq","CANCEL_BURN_REQUEST_SUCCESS","AGENCY_SUBMIT_REQUEST","agencySubmitUrl","OVERRIDE_DECISION","comment","overrideUrl","overrideResp","QUICK_SUBMIT_REQUEST","newRequests","submittingRequest","find","Submitting","Submitted","Failed","QUICK_SUBMIT_REQUEST_SUCCESS","QUICK_SUBMIT_REQUEST_FAILURE","CalendarSagas","CALENDAR_EVENTS_SUCCESS","getRegionByCoord","getTRSByCoord","getCountyByCoord","getFireDistrictByCoord","REACT_APP_REQUEST_PROXY_URL","addressLookup","city","zip","singleLine","_ref3$format","encodeURI","statusText","coordIntFeatsQueryRequest","serviceUrl","includeGeometry","returnGeometry","prefixWithZero","GeoCoordinateSagas","GEOCODE","addressCandidate","_addressCandidate$loc","candidates","source","GET_TRS_EXTENT","section","township","range","rangeDir","whereClause","GET_TRS_BY_COORD","GEOCODE_ADDRESS_FORM","getSearchLookupData","SearchTypes","customerInteractionState","customerInteractionStateSelector","customerInteractionType","customerInteractionStatusFormOpenSelector","createdInteractionIdSelector","userAcknowledgedSmokeComplaintPrompt","smokeComplaintassociatedBurns","smokeComplaintPermitXrefs","smokeComplaintAssociatedBurnSearchResults","associatedBurnsSearchParams","smokeComplaintAssociationFormIsVisible","customerInteractionStatusesByIdSelector","smokeComplaintTypeId","getSmokeComplaintSelector","defaultComplaint","complaint","smokeCompMapStateSelector","custIntSearchParamsSelector","custIntTypeId","searchComplaintsSelector","customerInteractionStatusesSelector","mapCounty","mapRegion","allRegionsSelector","includeDivision","regions","regionsForSelectSelector","defaultAssignee","DefaultAssignee","getCustomerInteractionLookupData","CUSTOMER_INTERACTION_ENDPOINT","getCustomerInteractionStatuses","_regions$filter","_regions$filter2","JURISDICT_LABEL_NM","getBurnPermitXrefs","getCustomerInteractionBurnPermits","xrefsUrl","xrefsResp","refreshAssociatedPermits","CustomerInteractionSagas","GET_CUSTOMER_INTERACTION","UPSERT_CUSTOMER_INTERACTION","CREATE_CUSTOMER_INTERACTION_STATUS","GET_ASSOCIATED_BURNS","ASSOCIATE_BURN","REMOVE_BURN_ASSOCIATION","_xrefs","_xrefs2","GEOCODE_CUST_INT_ADDRESS","addrLoc","_addrLoc$candidates$s","_addrLoc$candidates$s2","_regions$filter3","_regions$filter4","score","GET_SEARCH_LOOKUP_DATA","getDashboardMessages","REACT_APP_SERVER","msgs","sanitizedLinks","cleanLinks","Href","heading","Heading","DashboardSagas","GET_TILE_LINKS","GET_DASH_MSGS","REPORT_SERVER_URL","report","Name","ReportSagas","DOWNLOAD_REPORT","reportPath","rulesStateSelector","rulesSelector","ruleSelector","rulesLoadingSelector","ruleUpdatingSelector","ruleUpdatedSelector","ruleUpdateFailedSelector","sanitizeJSON","rules","parsedRules","valueToClean","cleaned","RulesSagas","ruleToPut","clearSearchPermits","clearSearchRequests","BurnPermitSearchActions","_response$responseBod2","BurnRequestSearchActions","SearchSagas","SEARCH_BURN_PERMITS_SUCCESS","processJWTGroups","REQUEST_URL","LOGOUT_URL","CHECK_AGENT_URL","decoded","groupKey","decGroups","jwt","UserInfo","userObj","exp","LOGOUT","setSeconds","setHours","getHours","getTimezoneOffset","UserSagas","USER_INFO_REQUEST","CHECK_AGENT_VERIFICATION","CHECK_TOKEN_EXPIRATION","allSagas","saga","withRouter","Component","useLocation","useNavigate","useParams","ErrorMessage","_React$Component","onClick","dataset","ClearError","prevProps","_this$props","ClearAllErrors","pathname","_jsxs","Toast","children","ToastHeader","ToastBody","React","mapDispatchToProps","connect","DangerIcon","defaultProps","DownloadPDF","useMemo","SuccessIcon","cssClasses","SuccessToast","HideSuccess","componentDidUpdate","ShowSuccess","ErrorBoundary","hasError","itemKeys","localforage","getItem","postError","authInfo","appVersion","LogError","userAgent","prevState","setState","SetPageTitle","Container","Row","Col","md","Card","CardHeader","tag","CardBody","CardText","textAlign","LoadingBar","_Component","Progress","animated","uiState","isModalOpen","isNavbarOpen","toggleOpenClass","firstElementChild","classList","toggle","PopoverButton","buttonClassName","iconClassName","popoverClassName","placement","popoverHeader","popoverBody","disabled","iconClass","_Fragment","Button","alt","UncontrolledPopover","PopoverHeader","PopoverBody","NetworkStatus","networkIcon","useInterval","callback","savedCallback","useRef","useEffect","current","setInterval","clearInterval","useOnlineSelector","useSelector","useToggle","defaultValue","_useState","useState","_useState2","toggleState","setToggleState","useCallback","useShowModal","dispatch","UiActions","stopEvent","preventDefault","stopPropagation","useTableCellLink","_ref$text","td","cellData","ReactDOMRender","useGetSearchExportFilename","filenamePrefix","useToggleNavbar","navbarOpen","overflow","UIActions","REACT_APP_SUPPORT_EMAIL","Banner","helpOpen","setHelpOpen","useDispatch","AppVersion","authProps","userId","mailToBody","toLocaleDateString","toLocaleTimeString","encodeURIComponent","contactSupportStyle","position","right","navbarHref","toggleHelp","getElementsByClassName","_useToggleNavbar","expand","Nav","navbar","NavItem","NavbarBrand","src","logo","NavbarToggler","onKeyPress","role","tabIndex","Popover","Link","memo","useNavClick","NavbarDropdownItem","itemProps","_useNavClick","dropdownItemStyle","padding","DropdownItem","NavLink","NavbarDropdown","menuStyle","dropdownOpen","setDropdownOpen","toggleDropdown","Dropdown","nav","DropdownToggle","caret","DropdownMenu","Admin","NavbarItem","itemText","Landowners","canCreateNewPermit","canMakePayments","PermitsAndApplyLinks","OrdersLink","menuStyles","canCreateNewRequest","RequestsAndCreateLinks","PostBurnLink","SmokeComplaints","LeftNavbarItems","Help","Logout","UserActions","REACT_APP_SAW_LOGIN_URL","ADFS_LOGIN_URL","Account","MenuItems","dropdownText","NavHistory","appHistory","showAppHistory","historyItemStyle","fontSize","dropdownMenuStyle","minWidth","navbarText","histItem","RightNavbarItems","DNRNavbar","navbarIsOpen","navbarCssClasses","classes","AuditRow","AuditBy","AuditDate","markup","auditDate","fromNow","AuditData","Dropzone","validFileExtensions","hightlight","onDragOver","onDragLeave","onDrop","dataTransfer","onFilesAdded","fileListToArray","openFileDialog","fileInputRef","list","validExts","createRef","multiple","dropZoneClass","dropZoneLabel","borderColor","ref","onChange","accept","Upload","onFileSelected","clearFiles","ResetFileUploading","readOnly","toFixed","FileActions","ForestHealthDocAlert","PileLocationDocAlert","FormError","formik","useFormikContext","invalid","component","FormFeedback","useInputChange","dispatchInputChange","newValues","onTextChange","_evt$target","onSelect","_dispatchInputChange2","resultName","resultValue","useSearchLookupsFetch","reduxDispatch","canSearchByAssignee","SearchActions","PersonActions","useEnterPressHandler","charCode","useSearchDateClick","startKey","endKey","_dispatchInputChange4","from","start","end","useAutoComplete","evtCallback","optProps","_optProps","textKey","RequiredIndicator","AssignedStaff","setFieldValue","labelClassName","requiredIndicator","dnrUsers","onAutoComplete","_e$target","_useAutoComplete","assignedStaffChange","for","AutoComplete","items","minCharactersToEnter","AssignToMe","currentUserPerson","assignToMe","autoFocus","defaultMenuIsOpen","placeholder","createable","searchValue","form","showOptions","_useState3","_useState4","createdOptions","setCreatedOptions","fieldNameProps","currVal","minChars","_onChange","shouldItemsRender","opt","__isNew__","components","DropdownIndicator","IndicatorSeparator","customStyles","option","defaultStyles","control","borderTop","borderRight","borderLeft","borderRadius","border","paddingTop","singleValue","noOptionsMessage","inputValue","remainingValLen","compProps","classNamePrefix","defaultInputValue","isClearable","isSearchable","filterOption","styles","CreateableSelect","ReactSelect","shouldFocus","ButtonGroupButton","isActive","active","CalculateButton","buttonText","onCalculateClick","RequiredLabel","labelFor","CheckBoxes","onCheckboxChange","inputName","getCheckedData","newData","checkedIdx","checked","_this$props2","CheckedData","onSelectAllChanged","_this$props3","CheckboxData","otherIsChecked","_this$props4","onOtherInputChange","_this$props5","OtherInputName","getLegend","showLegend","_this$props6","CheckboxLabel","_this$props7","showSelectAll","FormGroup","check","Input","otherInput","_this$props8","CheckboxError","OtherDescError","otherDescError","inputId","getMilliseconds","Fade","in","height","checkboxError","buildCheckboxes","DownloadAllPermitDocuments","documents","primaryColor","FormTour","run","onFinished","restartTour","setRestartTour","showTour","joyrideCallback","STATUS","FINISHED","SKIPPED","onHelpClick","Joyride","continuous","showProgress","showSkipButton","hideCloseButton","inputRowsClass","fuelDiam","inputLabelsClass","Field","FuelDiameters","FuelDiams","fuelDiamCats","fuelDiamCat","fuelDiams","_loop2","j","setFuelDiam","tonsPerAcre","jLen","RadioInputs","checkedValue","showPrompt","xs","RowToggler","rowLabel","rowClass","cursor","Select","buildOptions","defaultText","hasGroups","grouplessItems","jlen","groupLabel","Title","glen","getLabel","propertyName","selectedValue","MilitaryButton","boxShadow","TimePicker","hours","militaryFormat","amPm","updateButtonOrientation","_isMounted","isMidWidth","innerWidth","isMobile","verticalbuttons","parseValue","matches","onChangeHours","_this$state","_this$parseValue","onChangeMinutes","_this$parseValue3","onAmPmClick","_this$parseValue5","_this$parseValue6","toggleMilitary","innerText","parseForDisplay","_this$state2","_this$parseValue7","_this$parseValue8","substr","_this$parseValue9","addEventListener","debounce","removeEventListener","_this$state3","alignItems","ButtonGroup","vertical","ValidatingField","onBlur","isInvalid","getIn","inputClassName","newProps","_fieldProps","YesNoButton","_useFormikContext","YesNoButtonGroup","hiddenElClass","YesNoRadioButtonGroup","legend","ariaLabel","TonnageCalculationDocAlert","ConfirmationModal","handleClose","cancelAction","handleSubmit","submitAction","submitArgs","loadingComplete","successCallback","Navigate","redirectUrl","modalTitle","modalBody","openModalKey","disableSubmit","disableButtons","submitActionLabel","cancelActionLabel","ModalHeader","ModalBody","ModalFooter","showSpinner","Spinner","_state$ui$Modal","ApplicationDocuments","badgeClass","downloadDocument","DownloadFile","deleteDocument","DeleteFile","setDocumentType","docId","UpdateDocType","UploadFiles","uploadMailedAppDocAnyways","DocInfo","Failure","validateSection","_assertThisInitialized","Documents","_validateSection","sectionValidationInfo","BurnPermitFormSection","sectionBadge","Badge","sm","CheckIfFilesAreAlreadyAttached","documentTypes","DocumentTypes","SUPPORTS_SMOOTH_SCROLL","documentElement","isValidating","onEntered","validationError","saveAndNextStep","InvalidStep","SavedAndNextStep","domId","previousClick","PreviousStep","nextClick","NextStep","sectionCol","querySelector","isDisabled","disableContinue","hideContinue","disableBack","showControls","preContinueControl","continueFunc","continueText","_activeBurnPermitStat","canValidate","isComplete","Effect","hasErrors","isSubmitting","showDetailedError","changedEntries","prevVals","en","currVals","promptPendingChangesOnNav","isDirty","authPropsDefaults","bool","addressPropsDefaults","oneOfType","isRequired","AddressForm","geocodeAddress","Geocode","geocodeValues","ClearGeocodeResult","lastGeocode","clearForm","initialValues","addrKeys","touched","_addrKeys","disableState","setErrors","setTouched","resetForm","submitForm","addressTypes","CreateRecord","UpdateRecord","defaultAddrType","valueEntries","enteredValues","idsOnly","createFn","updateFn","setFormikNode","node","resetTouchedOnBlur","hasValues","setValSchema","validateStrict","getBasicValidationSchema","shouldGeocode","_validateForm","formKeys","setFieldTouched","validateForm","_this$formik$values","dirty","disableStreeLine3","showAddressTypes","showActiveControl","description","enableReinitialize","resetOnBlur","_i2","_Object$keys","Formik","onSubmit","innerRef","showAuditData","actionButton","GeoCoordinateActions","forwardRef","AgencyForm","isNewAgency","PhoneForm","showReceivesAlerts","phoneObj","mobilePhoneType","onPhoneTypeChange","ListGroup","ListGroupItem","EmailForm","validate","getEmailAddress","formikSubmit","Create","Update","emailToSubmit","onDeleteClick","deleteFn","showDelete","emailFieldSize","xl","validateAll","_validateAll","forms","formsToValidate","formErrors","submitAll","BurnNoticeSubscriberForm","PhoneForms","phonesAreShowing","onAddPhoneClick","CreateLocalPhoneForBurnNoticeSubscriber","onDeletePhoneClick","phoneid","DeleteBurnNoticeSubscriberPhone","createEmail","CreateBurnNoticeSubscriberEmail","deleteEmail","DeleteBurnNoticeSubscriberEmail","CreateBurnNoticeSubscriberPhone","buildPhones","lg","togglePhones","onSaveClick","_onSaveClick","timedSubmissionFail","emailErrors","burnNoticeSubscriberIsValid","burnNoticeSubscriberToSubmit","emailErrorsExist","_yield$Promise$all","_yield$Promise$all2","phoneErrorsExist","burnNoticeSubscriberErrorsExist","setSubmitting","CreateBurnNoticeSubscriber","UpdateBurnNoticeSubscriber","GetBurnNoticeSubscriberLookupData","oldBurnNoticeSubscriber","AddressForms","showEmails","showPhones","disableDeleteEmail","Form","onFormChange","SetInactiveMetadata","_errors","BurnNoticeSubscriberActions","mapStateSelector","latLongSelector","layerConfigsSelector","featureLayersSelector","DEFAULT_GEOJSON_LAYERS","geojsonLayersSelector","DEFAULT_FEATURE_LAYERS","mapLayerIdsSelector","featureLayerIds","geojsonLayerIds","reverse","activeMapIdSelector","hiddenLayerIdsSelector","layerConfigs","geoStateSelector","geoLocationSelector","geoLocationFormSelector","curr","retry","fn","par","ms","LAYERS_TO_SHOW","GeoCoordinateForm","latLongPopoverMessage","latLongPopoverOpen","MapGetLatLong","ShowLayer","SetLatLong","latLongInfo","UpdateLatLong","permitLocation","MapLatitude","MapLongitude","setMapLatLong","mapPoint","_this$formik$values2","formLat","formLong","_this$formik$values3","_this4","_this4$formik$values","_this5","_this$props$permitLoc","btnLabelClass","alignSelf","autoComplete","verticalAlign","MapActions","_mapStateSelector","_geoStateSelector","CONVERT_TO_AGENCY","PersonForm","hideVerifyButton","addressesAreShowing","alertPrefsAreShowing","onAddAddressClick","CreateLocalAddressForPerson","onDeleteAddressClick","addressid","deleteAddressAction","DeletePersonAddress","CreateLocalPhoneForPerson","deletePhoneAction","DeletePersonPhone","CreatePersonEmail","DeletePersonEmail","validateAlertPrefs","AlertMethods","textableMethods","prefs","hasAlertablePhone","newErrorState","pref","prefId","renderPersonTypes","canEditAgentPersonType","personIsDnr","renderContactMethod","contactMethods","renderRegion","canViewPersonRegion","showRegion","canSetSMDecisionStatus","verifyUserClick","OpenModal","renderAgencies","currFormValues","mailToHref","offset","canVerifyAgents","isUser","VerifyAgencyUser","onAlertPrefChange","buildAlertMethods","selectedPref","selectedMethod","buildAlertPrefItem","buildAlertPrefGroup","buildAlertPrefs","permitPrefs","requestPrefs","postBurnPrefs","CreatePersonAddress","buildAddresses","CreatePersonPhone","addRegionValidation","toggleAddresses","toggleAlertPrefs","convertToAgency","mergeUser","SetMergeObjectOneId","RedirectTo","personIsValid","personToSubmit","addressErrorsExist","personErrorsExist","CreatePerson","canUpdateRegion","UpdatePersonRegion","SetPersonRegion","UpdatePerson","GetPersonLookupData","GetAllAgencies","oldPerson","_this$props9","_this$props10","_this$props11","showAddresses","showTypes","getMinValidationSchema","mergedPersonRoute","disableMergeMessage","enableMerge","disableMerge","canChangeAlertPrefs","showAlertPrefs","enableAgencyConversion","ConvertPersonToAgency","RegionActions","AgencyActions","MergeActions","userPersonId","PLSSForm","isFormValid","setTRSWithFeature","feature","directions","SECTION_NR","TOWNSHIP_NR","RANGE_NR","RANGE_DIR_CD","dirId","GetTRSExtent","directionAbbrev","ClearTRSResult","UpdateBurnPermitLocationLegalDesc","changedValues","currValues","GetLocationLookupData","touchedFields","quarters","ownProps","ExternalLink","rel","setIsOpen","CollapseSectionHeader","NumberField","PostBurnForm","genSectionOpen","burnSectionOpen","fuelSectionOpen","weatherSectionOpen","CancelPostBurnSubmit","calculateConsumedTonnage","_this$getBurnTypes","getBurnTypes","pileType","broadcastType","naturalType","pileIgnPerc","burnedBlackAcres","burnedBlackPerc","burnTypes","setFormik","PostBurnIsSubmitting","_this$getBurnTypes2","showCancel","Collapse","MultiBurnDayFlag","Table","striped","responsive","PostBurnFormCard","LINK_PROP_DEFAULT","LinkPreview","_ref$href","_ref$form","hrefToRender","textToRender","LinkEditablePreview","arrayHelpers","listLen","_val$href","_val$text","_val$isNew","modalOpen","setModalOpen","toggleModal","remove","swap","backdrop","LinkEditCard","onDone","onDelete","marginRight","RuleForm","canEdit","rule","onToggleEdit","colSizes","updating","buttonColor","ruleValueFieldType","handleReset","float","RuleFormValue","updated","updateFailed","additionalClasses","valueField","_createElement","FieldArray","anything","otherProps","RuleListForm","editing","rulesFailed","resetLoad","rulesUpdated","_this$state$editing","nextState","setEditState","_this$state$editing2","_ref$rulesUpdated","_ref$rulesUpdateFaile","rulesUpdateFailed","newRulesUpdated","newRulesUpdateFailed","isEditing","FormButton","MergeForm","checkAll","checkedIds","onButtonClick","targetName","profileRoute","objKeys","domKey","cardBodyClass","arrMarkup","cardKey","card","aLen","_showControls","burnerId","LoadingCard","ApplicantInfoSection","UpdateApplicantInfo","componentDidMount","GetApplicantInfoData","canSelectLandowner","landownerAutoSelect","PersonName","agentAutoSelect","agencyAutoSelect","getPersonAddress","_person$Addresses$fil","addressForm","namePrefix","rows","phoneForms","multiplePhones","newFormState","agentSetFormValues","selectedAgentId","SetSelectedAgentId","agentForm","personForm","personSelect","showSaveButton","LandownerForm","agencySetFormValues","SetSelectedAgencyId","selectedAgencyId","agencyFormCard","agentFormCard","agentEmailError","landownerSetFormValues","selectedLandownerId","SetSelectedLandownerId","personFormCard","showBurnerEmail","renderForms","contactDataProps","SetContactData","SetTargetLandowner","SetMailToAgent","_ref11$submit","showGenericError","landownerFormIsValid","sectionErrors","sectionErrorEntries","se","seLen","setFieldError","ResetApplicantInfo","SetApplicantInfo","_this$props12","newAgent","agentsNowAvailable","agenciesNowAvailable","_this$props13","marginTop","whyDidYouRender","ApplicantInfoActions","agentsForAgencyFilter","agenciesForAgentFilter","selectedLandownerFilter","_state$ApplicantInfo","ag","People","_state$BurnPermitForm","BurnPermitAreaSection","UpdateBurnPermitArea","GetBurnAreaInfo","_ref$submit","errs","inputsWithError","paddingLeft","getBasemapLayer","basemap","baseLayers","getColRowFromXy","level","tileInfo","resolution","lods","_tileInfo$toJSON","floor","origin","getTileUrlsByExtent","extent","minCol","maxCol","minRow","maxRow","urls","xmin","xmax","ymin","ymax","_getColRowFromXy","_getColRowFromXy2","col1","row1","_getColRowFromXy3","_getColRowFromXy4","col2","row2","getTileUrl","popupField","extentBufferDegrees","ESRIMap","layerViews","handleFail","getExtentForGraphic","graphic","Extent","spatialReference","isGeographic","geographicToWebMercator","downloadTiles","_getBasemapLayer","graphicsLayer","gLen","maxLevel","tileUrls","_ext","_tileUrls","uLen","layers","ToggleDownloadMapData","drawCallback","hasRecursed","drawGraphics","mapData","popup","close","mapLayer","buildGraphicsLayers","removeAll","template","buildPopupTemplate","layerObj","_graphic","Graphic","pointSymbol","addMany","goTo","_ret","addLayersToMap","mapLayers","GraphicsLayer","buildLegend","Legend","container","layerInfos","getLegendLayers","legendExpand","Expand","expanded","legendOpen","domNode","expandIconClass","expandTooltip","collapseIconClass","collapseTooltip","configureFeatureLayers","featureLayers","layerProms","featLayer","lvs","FeatureLayer","whenLayerView","lv","layerViewsLoading","configureGeoJSONLayers","geoLayer","geojsonLayers","GeoJSONLayer","disableMapClick","mapClickEvent","configureMapClick","on","getSymbolByGeometry","polylineSymbol","polygonSymbol","proxyUrl","addProxyRule","urlPrefix","loadMap","checkLayersAreVisible","showAllLayers","updateVisibleLayers","addGraphic","layersToShow","layersToHide","TargetFeatureLayerIds","allLayers","lView","_step2","_iterator2","layerView","parentRef","ActiveMapId","spatialRelationship","queryFeatures","GraphicsOverlapFeatures","targetWidgetLocation","move","basemapGallery","BasemapGallery","bgExpand1","compassWidget","Compass","fullscreen","Fullscreen","homeWidget","Home","layerList","LayerList","locate","Locate","layerListExpand","layerVisibility","_step3","_iterator3","_getIntersectingFeatures","_ref3$recursed","recursed","_iterator4","_step4","getIntersectingFeatures","_setLatLong","includeIntersecting","intersecting","toPrecision","includeIntersectingFeatures","onIntersectingFeaturesChanged","ShowLoading","ArcGISMap","MapView","onLayerViewCreate","_this3$view$map","MapDragEnd","createMapControls","bindSketch","HideLoading","MapDoneLoading","refObj","newGraphic","sketchViewModel","reset","editGraphic","sketch","Sketch","self","toolType","toolEventInfo","tool","complete","canAdd","canDelete","FeatureLayers","HideLayer","TARGET_FEATURE_LAYER_IDS","geoLocCardHeight","minHeight","mapCardHeight","BurnPermitBurnLocationSection","legalDescError","CheckIfGraphicsOverlapLayerFeatures","GetBurnLocationInfo","getFormStatus","valid","formStatusObj","additionalLocationInfo","GeoCoordinateState","coordinates","UpdateAdditionalLocationInfo","buildGeoLocGraphics","_this$props$GeoCoordi","graphicsForUGA","plssFormAvailable","rings","TRS_CD","fLen","convertedFeature","latLongPoint","BurnPermitID","addressFormHasLocation","addressText","geoJson","addressPoint","changedData","canEditUga","GeneralMessage","deleteAddress","DeleteBurnLocationAddress","createAddress","CreateBurnLocationAddress","mapRef","setFormikRef","setAddressFormRef","setGeoCoordFormRef","setPLSSFormRef","setMapRef","onAddressFormBlur","validateAt","ResetGeoCoordinate","errorCallback","abortEarly","_onIntersectingFeaturesChanged","resetGeocodeResult","layersToHandle","Counties","FireDistrictDepartments","_yield$this$getFormSt","gcHasValues","gcIsValid","_yield$this$getFormSt2","trsHasValues","trsIsValid","_args4","checkBeforeSetting","setCountyField","setFireDistField","setRegionField","addressLocation","COUNTY_NM","FPD_DESC","ResetGeocoded","_ref3$submit","_isValid","_yield$this$getFormSt3","addressTouched","addressHasValues","addressValid","plssForm","_yield$this$getFormSt4","plssValid","geocoordForm","_yield$this$getFormSt5","geocoordTouched","geocoordHasValues","geocoordValid","additionalLocationInfoErrors","AdditionalInfoValid","coordHasValidValues","addressHasValidValues","_onAddressFormBlur","currentTarget","relatedTarget","contains","_this3$AddressForm$fo","addressType","isInUGA","burnLocationMapData","applicationStatus","IsGeocodingLocation","Directions","BurnFuelsSection","calcInputLabels","calcInputRows","formIsValid","checkIfOtherDescriptionIsRequired","formValues","UpdateBurnPermitFuels","calculateTonnage","onFuelDiamChange","thisFuelDiamId","fuelDiamIndex","GetBurnPermitFuelsInfo","_ref2$submit","FuelsInfo","DuffTypes","MODAL_KEY","DeletePile","pileGroupName","pileGroupId","hideButton","btn","DeleteAllPiles","CancelEditPile","cancel","DownloadCSV","BatchUpload","upload","AddPile","addPile","ShapeDimensionProps","DimensionField","pileShape","propName","formGroupClasses","pileImages","PileGroupForm","formikRef","mounted","reqFailed","targetDimensions","dimensionProps","dimension","_useSelector","pileShapeNumber","display","DataTable","emptyTableMessage","dataTableInstance","redrawTable","hiddenCols","table","clear","dtCols","columns","colLen","col","column","index","draw","onTableRowClicked","disableRowClick","onRowClick","clickRoute","setUserToken","setRequestHeader","UserToken","getCurrentAjaxData","ajaxConfig","updateAjaxConfig","dataTableConfig","onAjaxError","beforeSend","ajax","dataSrc","_jqxhr","_textStatus","dtUrl","load","reload","loadTable","columnDefs","ordering","disablePageLengthChange","pageLength","dom","rowId","language","searchPlaceholder","emptyTable","scrollX","autoWidth","lengthMenu","stateSave","enableExport","lengthChange","paging","scrollCollapse","pagingType","scrollY","disableDefaultOrdering","$tableEl","$","rowData","rowIdProp","onDeleteRecordClicked","filterInput","setAttribute","setTableNode","hasNewRecords","hiddenColsChanged","redraw","elementId","CloseModalButton","PileGroupInstructions","MustCalculate","EstimateTonnage","calculate","outputColumns","dataTableColumns","AreaIsExempt","NeedsPileGroups","BurnPermitPileGroupsSection","renderTableOrForm","calcMarkup","inputColumns","inputColumnDefs","EditBurnPermitPileGroup","createdCell","GetBurnPileGroups","DeleteLocalPileGroups","dir","AgreementTerms","OnlinePopover","instructionsState","instructionsSelector","instructions","userAcknowledgedInstructions","StepsNav","dot","dots","currentStep","_steps$i","icon","isCompleted","buttonProps","BurnPermitInstructionsActions","goToStep","Apply","caption","Approved","AutoIssuedSteps","Separator","Issued","Denied","NoPaySteps","Sign","Review","PermitFeePopover","PayStep","readyToPay","Pay","PrivateAndAgentAndDNRSteps","Instructions","autoIssue","appSteps","help","modalkey","ApplicationNextSteps","newPermitOrderId","shouldOpen","BurnPermitOrderActions","maxWidth","CopyApplication","DeleteApplication","ForcePermitApplicationSignature","forceSignApp","BurnPermitSignatureActions","PermitNextSteps","ConditionsWarning","permitConditionValues","DocuSignSteps","isPreviewing","isIssuing","isReissuing","doNotShow","setDoNotShow","stepIdx","setStepIdx","processType","btnText","doNotShowCheck","acknowledge","prevClick","eSignatureSteps","issueStep","atLastStep","pageControls","acknowledgeControls","DocuSignModal","modalHeader","disableModalLaunchBtn","docusignScenario","acknowledgedProcessSteps","btnColor","footer","IssuePermit","burnPermitDates","onClickArgs","datesMissing","formikContext","issuePermit","ReIssuePermit","reissuePermit","PreviewPermit","SignApplication","AutoApproval","BurnReasonDoc","useDownloadPermitFile","fileInfo","DownloadApplicationLinks","setFileInfo","_useSelector2","_useSelector3","downloadDoc","downloadApp","downloadCert","ApplicationSignature","signedBy","SignPermit","documentsSection","onSignPermitClick","ApplicantSignature","ApproverSignature","DownloadPermitLinks","downloadPermit","PermitSignature","autoRegionApproval","needsApproverSignature","needsApplicantSignature","usePermitFileUpload","mustUploadPermit","isGovPermit","UploadPermitWarning","doUpload","Signatures","setFiles","applicationIsSigned","onSignClick","hasSignature","referenceDirectionTypesSelector","distancesSelectSelector","directionsSelectSelector","burnReasonSelectSelector","burnUnitSelector","forestTypesSelectSelector","arrivalTimeForSelectSelector","burnPermitSiteByIdSelector","SiteId","burnPermitReferenceDirectionsSelector","siteRefDirs","rd","baseSiteEquip","EquipmentTypeIds","HasEquipAnswer","burnPermitSiteEquipmentSelector","siteEquips","combos","siteEquipCombos","permitSiteEquip","mappedEquips","mappedValues","equips","offsiteArrivalTimeQuery","offsiteArrivalTime","rowClasses","isOtherEquipType","FireLineEquipmentType","ExtinguishEquipmentType","formiks","FormIndex","labels","validateForms","_validateForms","validForms","siteEquip","_siteEquip","arrivalTime","flat","siteEquipment","formProps","_objectWithoutProperties","_excluded","_excluded2","_objectSpread2","_evt$target2","intValue","BurnPermitReferenceDirections","ReferenceDirectionTypes","refDir","ValidateDistance","Distances","BurnPermitSiteSection","setSiteEquipFormikRef","SiteEquipmentForm","setRefDirFormikRef","ReferenceDirectionForm","firstRowStyles","justifyContent","flexDirection","GetBurnPermitSiteInfo","thisFormsErrors","refDirsAreValid","siteEquipsAreValid","UpdateBurnPermitSite","ForestTypes","BurnReasons","BurnUnits","defualtProps","COMMENT_SCHEMA","APPLICATION_STATUS_SCHEMA","ApplicationStatusForm","canEditPermitStatus","appStatusIsReadOnly","applicationStatusIsReadOnly","CommentRow","ExtendPermit","PERMIT_EXTENSION_SCHEMA","ExtendPermitForm","validateOnMount","daysFromNow","ValidDateField","PermitDuration","_useField","useField","inputProps","validDateChange","toDate","PermitDurationField","PermitDurations","expirationYearChange","newVal","PERMIT_STATUS_SCHEMA","FormValidator","IssuePermitForm","showPermitDurationRadioButtons","getFullYear","initValues","formChildren","submitCount","REVOKE_PERMIT_SCHEMA","RevokePermitForm","onUndo","canClear","PERMIT_SUSPENSION_SCHEMA","SuspensionForm","suspensionStartDate","suspensionEndDate","onEndSuspension","DELETE_APPLICATION_STATUS_MODAL_TYPE","DELETE_PERMIT_STATUS_MODAL_TYPE","BurnPermitStatusSection","editingSuspension","revokingPermit","extendingPermit","activeButton","modalState","isModalVisible","modalType","modalData","deleteButtonCol","showDeleteStatusModal","getModalHeader","getModalBody","ID","getModalFooter","clickAction","deleteApplStatusSubmitAction","deletePermitStatusSubmitAction","resetModalState","isSuspended","DeleteApplicationStatus","DeletePermitStatus","endSuspension","ClearSuspension","saveSuspension","UpdateSuspension","UndoRevocation","toggleRevokingPermit","RevokePermit","toggleExtendingPermit","toggleSuspension","issuePermitControl","PermitEnvelopeIsExpired","PermitEnvelopeExpiration","PermitEnvelopeExpiringSoon","buildPermitAdminControls","showSuspendButton","buildPermitRelatedLinks","HasConditionsSet","canEditPermitConditions","conditionsLinkText","permitIsBurnable","defs","canViewInternalOnly","GetBurnPermitStatusHistory","ConditionSetPermit","LoadingDocuSignUrl","GetAssignableUsers","issuedReqs","canComment","showApplStatusComments","BurnPermitStatusHistory","SubmitApplicationStatus","ConditionActions","_permitDates","_permitDates$ValidDat","_permitDates$Expirati","_permitDates$Suspensi","_permitDates$Suspensi2","_permitDates$Suspensi3","_permitDates$RevokedD","_permitDates$RevokedC","stateObj","IsLoadingDocuSignUrl","colSize","PermitFailedToLoad","AgentUnverified","iconStyles","background","Complete","Incomplete","popover","ProfileStatus","profileStatus","HowToApply","understandCallback","setDoNotShowAgain","checkboxChange","userUnderstandsInstructions","NoPermitModal","countdown","startCountdown","interval","secondsRemaining","okClick","redirectToUrl","secondsText","imageDir","ImprovedPropertyCard","originalHeight","setOriginalHeight","imageIdx","setImageIdx","galleryRef","setGalleryRef","screenChange","isFullScreen","newHeight","slideToIndex","images","original","thumbnail","ecology","ImageGallery","onScreenChange","onSlide","UnimprovedPropertyCard","DoYouNeedABurnPermit","yesCallback","setIsModalVisible","improvedVisible","setImprovedVisible","_useState5","_useState6","unimprovedVisible","setUnimprovedVisible","isUnimprovedProperty","isImprovedProperty","showImproved","showUnimproved","back","ApplicationMethods","applyOnlineCallback","applyOnline","downloadOnlineOnly","downloadLink","sawLink","LoadingApplication","loadingAppContainerSize","CreateBurnPermit","isUnverifiedAgent","answeredPropertyQuestion","setIsUnimprovedProperty","showApplicationMethods","setShowApplicationMethods","showInstructions","setShowInstructions","_useState7","_useState8","isCreatingApplication","setCreateApplication","understand","profileStatusContainerSize","ForestHealthExemptionSection","GetForestHealthData","UpdateForestHealthData","CreateForestHealthData","canReviewExemption","showSaveControls","needsForestHealthDoc","userCanReviewExemption","ProblemTypes","ForestHealthActions","totalSteps","HeaderComp","Header","StatusHeader","headerOnly","enableToggler","enableSummary","_useMemo","statusDesc","showHeader","showSummaryOrToggler","TonnageSection","estFee","EstimatedFee","totalTonnage","NotFound","BurnPermitCartSummary","orderXref","landowner","usePopover","orderHasPayment","totalEstFee","totalEstTonnage","RemovePermitFromOrder","marginLeft","isFinite","CASH_METHOD","PAYMENT_METHODS","PhysicalPaymentForm","changePaymentMethod","CheckDate","VoucherDate","mapOrderToFormikValues","getPrefix","getPaymentMethods","eligibleForVoucherPayment","eligableForCashCheckPayment","paymentMethods","getPaymentMethodName","paymentMethod","setDateToToday","setFullAmount","commandCode","whiteSpace","RefundForm","OrderPaymentSummary","Contact","REMOVE_PERMIT_MODAL","RemovePermitFromOrderModal","idToRemove","confirmRemoveClick","BurnPermitOrderDetail","UpdateOrder","toggleEditing","toggleRefunding","refunding","removePermit","itemIdToRemove","removeItemFromCart","SetNewOrderId","confirmDeleteOrder","showNextSteps","GetBurnPermitOrderDetail","oldProps","orderHadPayment","canRefund","showEditButton","enableRefundButton","showPhysicalPaymentForm","showOrderSummary","showRefundForm","DeleteOrder","hasIssuedPermit","PermitAppLink","ApplicationSigned","enableCreateOrder","createOrder","CancelSigning","DeclineSigning","PermitSigned","MailTo","subject","mailto","SigningError","DocuSignCallback","_useSearchParams","useSearchParams","ReloadApp","ReportMessageCard","ReportViewer","reportHtml","ReportName","reportRequest","ReportPath","Token","extractTable","collectionToArray","collection","tableEls","reportNode","getElementsByTagName","isOldEdgeBrowser","tables","dataTable","tbody","headerCells","thead","headerRow","newTh","insertBefore","getElements","dropdownToggle","currentPage","totalPages","onKeyUp","buildParamString","paramContainer","inputs","selects","viewReportWithParams","exportReport","exportType","exportReportRequest","DownloadReport","parentElement","setPage","exportDropdownToggle","exportMenuOpen","exportMenu","nextElementSibling","setNode","ua","edge","dangerouslySetInnerHTML","__html","ReportActions","Id","Path","OfflineMessage","ClearOfflineMessage","AppLoading","loadingBarStyle","zIndex","colStyles","cardStyles","ClearGeneralMessage","ClearAllGeneralMessages","Message","TourSteps","_ref$isDnr","disableBeacon","formStep","submitStep","LatLongEffect","FollowUpForm","prompt","_BurnPermitLocation$f","ValidationSchema","alphaReg","digits","BurnComplaintSearchResult","CardinalDirection","MilesAway","addToClasses","AssociatedBurns","enableAdd","burns","setShowPrompt","prevXrefs","reqLinkCellCallback","permLinkCellCallback","burnReqColumnDefs","onToggleAssoc","getAttribute","CustomerInteractionActions","IsAssociated","permitIdIdx","SearchInput","showPopover","ApplicationId","fromMonth","toMonth","yearsMarkup","monthsMarkup","months","month","YearMonthForm","getMonth","DateRange","fromValid","toValid","setValid","setParsedValid","which","handleFromChange","modifiers","dayPickerInput","toPicker","getInput","toInput","handleToChange","picker","getDayPicker","showMonth","parseDate","formatDate","handleYearMonthChange","_evt$target$form","year","targetMonth","disabledDays","fromDate","pickerProps","canChangeMonth","selectedDays","captionElement","DayPickerInput","el","fromPicker","fromPlaceholder","dayPickerProps","onDayChange","toPlaceholder","NumberRange","minName","minValue","minPlaceholder","maxName","maxValue","maxPlaceholder","labelName","PermitNumber","ForestHealth","SearchForm","smokeComplaint","fireDistricts","initialParams","StartDate","EndDate","Radius","FireDistrictId","cancelSearch","resetSearch","prevShow","newParams","updateSearchParams","_objectSpread3","_e$target2","onSearchClick","onSubmittedDateChosen","_objectSpread4","_e$target3","regionAutoChange","_useAutoComplete3","countyAutoChange","_useAutoComplete5","fireDistrictChange","handleKeyPress","FireDistrict","FindBurnsBtn","ActionBtn","iconClasses","isAdd","LinkBurnDialog","_useShowModal","_useShowModal2","hasBurns","modalText","viewAssociatedBurns","findBurns","addEditBurns","modalBodyStyle","cancelInteraction","confirmCancel","CustomerInteractionsMap","mapConfig","popupTitle","eventLocData","_intersecting$filter","matchingRegion","targetFeatureLayerIds","StatusTable","customerInteractionStatuses","CUSTOMER_INTERACTION_STATUS_SCHEMA","StatusForm","onCancelClick","submitStatus","_onCancelClick","statusModalOpen","addStatus","cancelStatus","statusClick","statusStyle","modalSize","StatusBtn","SmokeForm","mapCheckDelay","setMapCheckDelay","setShowTour","successId","acknowledged","formIsReadOnly","fieldIsReadOnly","submitComplaint","acknowledgeSmokePrompt","updateLocation","_Latitude","_Longitude","getLatLong","acknowledgeSize","headerText","_headerText","tourSteps","flexEndStyle","columnGap","submitText","LinkBurnRequest","StatusDialog","onReset","CancelInteraction","defaultConfig","buttons","SimpleDataTable","_ref$elementId","_ref$className","_ref$width","_ref$config","tableRef","dataTableRef","dt","SmokeSearch","complaintTypeId","complaints","onClearClick","SubmittedOnAfter","SubmitteOnBefore","linkCellCallback","rowCallback","submitParams","mapBtnText","mapColStyle","mapClass","classString","comp","StatusId","SubmitterName","SubmittedOnBefore","SimpleTable","SmokeSuccess","Tile","child","alertSetup","Notices","AlertMsg","propTypes","PropTypes","dashboardSelector","tileLinkSelector","dashMsgsSelector","_ref$Messages","DashboardContainer","DashboardActions","renderLinks","layerActionObj","GeoJsonLayers","ModalTd","CalendarModal","_ref2$modalOpen","iconText","eventLink","_ref2$eventDetails","eventDetails","viewOnMap","iconHeader","eventDetailRows","unshift","Color","onMapLinkClick","footerLink","Url","mapLink","calendarStateSelector","calendarEventsSelector","calendar","mapBurnRequestsForCalendar","multiBurnReqEvents","_r$PlannedIgnitionTim","_r$PlannedIgnitionTim2","dateUTC","tz","setMinutes","pacificTimeZoneDate","getMinutes","reqDate","textColor","multiBurn","PlannedDays","multiStartDate","multiEndDate","multiEventDetails","newEvent","EventLink","calendarDataSelector","calendarData","calendarMapDataSelector","_ref$isAuthenticated","calendarReducer","_action$payload$event","extendedProps","requestToShow","mapReady","eventRender","insertAdjacentElement","multiBurnIcon","CalendarContainer","_useReducer","useReducer","_useReducer2","calendarDispatch","onMapReady","displayModal","_ref2$event","_useToggle","_useToggle2","legendShowing","toggleLegend","mr","calendarRender","_evt$view","activeStart","currentStart","currentEnd","activeEnd","modifiedEndDate","utcOffset","subtract","CalendarActions","brLayer","queryGraphics","viewRef","targetGraphic","open","triggerAction","mapRowStyle","rowToggleStyle","header","left","today","week","plugins","dayGridPlugin","timeGridPlugin","bootstrapPlugin","toggleBtnText","FullCalendar","eventLimit","eventClick","datesRender","defaultDate","defaultView","themeSystem","CartButton","badgeValue","CartAlert","orderItemCount","enablePrompt","CartModal","onRemoveClick","leftButtonColor","onCloseClick","leftButtonText","emptyCartColor","onEmptyCartClick","emptyCartText","rightButtonColor","onCheckoutClick","rightButtonText","confirmEmptyClick","hideCart","emptyCart","ShowModal","showCart","cartActions","removeFromCart","cart","emptyCartConfirm","CloseModal","ExportPermits","emptyArray","useCart","currentCart","_ref$Cart","prevCart","_ref2$BurnPermitOrder","addToCart","CartActions","previous","addToCartClasses","removeFromCartTitle","toggleButtonState","defaultLayerObj","BurnPermitTableInner","_ref$enableCart","aboveTableContent","belowTableContent","showNewAppLink","_ref$showCardHeader","showCardHeader","_React$useMemo","appIdColIdx","permitIdColIdx","cartItemsRef","permitMapLayer","layerData","onToggleItemInCart","cartRef","removedItems","addedItems","ToggleMap","createdPermitIdCellCallback","cellToRender","AgencyRegionApproval","createdAppIdCellCallback","getFileName","dtConfig","filename","BurnPermitTable","_ref2$enableCart","aboveCardContent","_ref2$showCardHeader","showExport","_useCart","_useCart2","BurnPermitListContainer","CloseDownloadModal","toggleMapDownload","downloadPermits","confirmDownloadPermits","DownloadPermits","GetMyBurnPermits","DoneDownloadingBurnPermits","DownloadMapData","SetDownloadStatus","canBeAssigned","ResetDownloadStatus","_state$BurnPermitList","ORDER_DATATABLE_COLUMNS","BurnPermitOrderListContainer","orderIdColIdx","ReactDOM","Fragment","GetOrders","orders","BurnPermitOrderPayContainer","updatingOrder","redirecting","processing","orderIdRegex","handleOrder","canRecordCashCheck","isRedirectBackFromPaymentSite","hasPaymentState","onlinePayment","isVerifiedGovCust","onlyPaysOnline","isPaymentMatch","regMatch","submitOrder","navToPaymentSite","UpdateBurnPermitOrder","orderInfo","z","ct","hash","queryParams","returnurl","custom","amount","queryString","PostBurnPrompt","isPromptShowing","onToggleList","iconAlt","expandIcon","postBurnText","PostBurnPromptText","textDecorationLine","BurnRequestNotices","_ref$requests","_ref$isOpen","submitBurnRequest","requestTable","submitButton","requestLink","colSpan","BurnRequestTable","_ref$showLandownerAge","_ref$showPermitAction","showPermitAction","reqIdColIdx","permNumColIdx","postBurnColIdx","BurnRequestsMapLayer","bindProps","buildCellLink","cell","hasPostBurn","noopAction","DOWNLOAD_BURN_REQUESTS","BurnRequestListContainer","requestModalDismissed","togglePostBurn","TogglePostBurn","confirmDownloadRequests","DownloadRequests","closeBurnReqsNotices","checkPostBurn","ClearPostBurnStatus","GetPostBurnStatus","GetMyBurnRequests","GetRequestNotices","showPostBurn","showExpander","burnRequestNotices","downloadRequestCount","_state$BurnRequestLis","SUBMIT_REQUEST_REVIEW","OVERRIDE_BURN_REQUEST_DECISION","BurnRequestReview","statusCommentRequired","defaultComment","isDivisionApprover","BurnRequestRegionId","MakesSMDecisions","canChangeStatus","SubmitRequestStatus","submitReview","showOverrideModal","showInternalStatus","canAssignRequest","GetBurnRequestStatusHistory","requestStatus","hideForm","ShowOverride","requestStatusIsReadOnly","overrideCommentError","overrideComment","OverrideDecision","BurnRequestStatusHistory","DeleteRequestStatus","isRegionApproved","setUTCHours","IgnitionDate","_ignDate","ignitionDateIsToday","isSame","CanOverrideDecisions","burnReqInPersonRegion","BurnPermitSummary","burnedTons","burnedAcres","permitDays","showConditionLink","conditionsUrl","auditData","BurnPermitSummaryCard","collapse","showPermitLink","permitUrl","transform","noFuncProvided","PermitNumberSearch","doSearch","searchHeaderText","setPermitNumber","handleSearch","createCellUnitFormatter","createCellNullFormatter","other","createCellDateFormatter","createLinkCallback","createRequestLinkRenderer","cellClick","createPrimaryRequestLinkRenderer","ico","createPermitLinkRenderer","ajaxError","COLS","RelatedBurnRequests","_ref$requestId","_ref$requestStatus","_ref$updateDate","updateDate","buildColumnDefs","cancelModalName","cancelValidationSchema","noop","CancelBurnRequestModal","_ref$submitCancel","submitCancel","_ref$burnRequestId","_ref$cancellationReas","cancellationReasons","cancelForm","_React$useState","_React$useState2","setShowSpinner","setCancelFormNode","onFormikSubmit","onSubmitButton","cancellationReasonsOptions","cancelModalBody","CancellationReasonId","BurnRequestFormButtons","_ref$showSaveButton","_ref$showSubmitButton","showSubmitButton","_ref$showDeleteButton","showDeleteButton","_ref$showCancelButton","showCancelButton","_ref$isMultiDay","isMultiDay","_ref$isChildRequest","isChildRequest","_ref$openModal","_ref$submitRequestFla","submitRequestFlag","addWrapper","wrappedButtons","saveButton","multiDayUpdateModalName","multiDayModalName","multiDayUpdateSubmitModalName","deleteModalName","dateFormat","BurnRequestForm","_ref$burnRequest","_ref$BurnPermitId","_ref$IsPermitGovAgent","IsPermitGovAgent","_ref$requestStatusFla","requestStatusFlags","submitting","anyIgnitionDate","isPileBurnOnly","isBurnerOrAgent","canEditInfoReq","showDetailedStatus","IsRegionApproved","CancellationReasons","openModalAction","submitDelete","confirmMultiDayUpdate","isSubmit","setFormikRefs","getBurnDays","ignitionDate","Selected","postBurnRoute","FormikForm","dayOfWeek","BurnRequestDetailContainer","BurnPermitNumberError","initialized","expandPostBurnPrompt","reloadRequest","GetBurnRequestInfo","onPermitSearchChanged","ClearPermitLoadFail","doPermitSearch","UpdateSearchParam","GetBurnPermitInfo","GetPostBurnsByRequestId","GetPostBurnsByPermit","showPostBurnPrompt","tomorrow","ResetToInitial","LoadingBurnRequest","canBypassSignature","permitIsSigned","hasSignedPermitDocs","agencySigned","applicantSigned","bypassSignature","isGovAutoPermit","permitIsActive","bodyText","CardFooter","multiDayIcon","ShowForestHealth","hasPostBurnPrompt","PostBurnValidationSchema","createsGovAgentPermits","requestStatusObj","_permitPeopleIds","Signature","initState","searchFormReducer","nextParams","SearchFormCard","ApplicationStatuses","PermitStatuses","canSearchAssignee","savedSearchParams","_React$useReducer","_React$useReducer2","_useInputChange","_useInputChange2","_dispatchInputChange","_usePermitSearchActio","resetCallback","usePermitSearchActions","_usePermitSearchActio2","onToggleMap","onResetClick","assignedUserSelect","assignedTo","BurnPermitSearchContainer","PermitSearchActions","initialState","datesValid","BurnRequestDateValid","PlannedIgnitionDateValid","nextDatesValid","BurnRequestSearchForm","_useRequestSearchActi","useRequestSearchActions","_useRequestSearchActi2","onRequestDateClick","onIgnitionDateClick","dispatchValidChanges","dateRangeValidChange","rangeName","ExportRequests","BurnRequestSearchContainer","RequestSearchActions","BurnPermitFormContainer","scrollToStep","btnNav","activeBtn","offsetLeft","ValidatePermit","reloadPermit","GetBurnPermitDetail","instructionsModalKey","invalidApplicationModal","unlockApplicationModalKey","deleteAppModalKey","copyAppModalKey","renderSteps","prevPermitId","currPermitId","showInvalidAppModal","canEditLocAfterSub","isLegacy","canEditLegacyAppl","BurnPermitFuelsSection","BurnPermitSignatureSection","forestHealthSection","canReviewFHExemption","SetActiveStep","Comp","showUnlockButton","newRequestUrl","statusProps","ToggleApplicationSummary","gap","UnlockApplication","OpenModalKey","GetBurnPermit","ActiveBurnPermit","LoginReceived","SetReturnUrl","setRedirect","ApiToken","copiedMessage","setCopiedMessage","copyToken","clipboard","writeText","HistorySettingForm","newHistLen","NetworkNotifications","NetworkNotificationsEnabled","UserGroups","userGroups","MapLayers","mapLayerIds","activeTab","setActiveTab","mapLayerTabClick","configname","getClassName","checkboxData","tabs","TabContent","TabPane","tabId","ProfileContainer","isLoadingUser","userInfoIsOpen","setUserInfoIsOpen","userProfileIsOpen","setUserProfileIsOpen","setRequestModalDismissed","closeBurnReqNotices","burnReqNoticesOpen","ForestFuelTypesContainer","GetLookupData","forestTypes","DELETE_AGENCY_MODAL_KEY","AGENCY_PEOPLE_URL","DATATABLE_COLS","AgencyContainer","emailToCreate","phoneToCreate","addressToCreate","CreateAgencyObject","createPhone","CreateAgency","UpdateAgency","doUpdate","updateType","UpdateAgencyObject","updatePhone","updateAddress","updateEmail","agtErrs","emailErrs","addressErrs","phoneErrs","personIdColIdx","setAgencyNode","setAddressNode","setPhoneNode","setEmailNode","mergeAgency","ResetAgencyId","ClearAllSaveState","_this$props$params","CreateNewAgency","FetchAgencyData","canViewAuditData","PhoneCountryCode","DeleteAgency","SetAgencyId","_state$Agency","AgencyListContainer","PersonListContainer","canManageAllPeople","canManageLandowners","PersonContainer","UserInfoError","burnPermitColumnDefs","DeactivatePerson","NewPerson","GetPerson","marginBottom","AddContactButton","addContact","ContactConditionForm","onDirtyChanged","arrayError","ContactConditionCard","removeFunc","ContactConditionList","formattedPhone","formatPhone","fieldNamePrefix","InputCondition","selected","validateSync","onValueChanged","conditionValidityChanged","_this$isValid","_this$isValid2","_this$isValid3","additionalProps","rowClassName","htmlFor","Editor","wrapperClassName","editorClassName","toolbarClassName","editorStateChange","valueHtml","rawContentState","draftToHtml","RDEditor","onEditorStateChange","EditorCondition","_ref$condition","_ref$condition$BurnPe","_ref$condition$BurnPe2","valueChanged","BaseCondition","onConditionSelected","indent","errorSection","conditionKey","Condition","onConditionChecked","parentIsSelected","conditionBody","conditionProps","getUnit","ConditionCheckboxes","pfx","selectedData","onCheckChanged","MultiSelectCondition","newValue","isValidNow","newError","otherValue","getOtherValue","updateValidity","condName","onOtherChange","mapSelectedValues","selectedConditions","selectedConditionValues","selectedConditionvalidity","permitConditionChecked","selectedConditionValidity","newConditionValues","newConditionValidity","newSelectedConditions","addParent","idsToAdd","SetConditionErrors","ConditionErrors","ClearConditionError","parentCond","Conditions","siblings","onChanged","onValidityChanged","nextValids","conditionValueChanged","multiSelectValueChanged","nextValues","oldValue","PermitConditionValues","Equipment","basicProps","EditContactsAndConditions","onConfirm","ConditionWarning","SaveCancelButtons","PermitConditionsContainer","SetActiveConditions","submitContacts","contactsAreDirty","SetRequiredContacts","editIssuedPermit","onValuesChanged","newValid","onContactChange","toggleEditingContactsAndConditions","updateContactsAndConditions","cancelEditingContactsAndConditions","btns","ConditionContacts","userCanEditConditions","conditionsAreEditable","TelPhone","phoneNumber","RegionCard","_props$region","RegionListContainer","baseDefaultProps","BurnRequestSummaryCard","BurnRequestSummary","dateAndTime","PostBurnContainer","permitIsOpen","requestIsOpen","requestSelectIsOpen","updateRouteParams","newTitle","parseRouteParams","InitializeForm","SetPostBurnPermit","submitPostBurn","UpdatePostBurn","CreatePostBurn","mins","selectedRequestChanged","SetPostBurnUsesRequest","renderRequestSelector","BurnRequestsForSelect","IsLoading","selectedRequest","togglePermitCard","toggleRequestCard","toggleRequestSelectCard","renderPostBurn","ClearPostBurnPrompts","changeRoute","_this$props$location","PostBurnIsLocal","BurnedTons","PermitDays","showPostBurnForm","burnRequestCard","burnRequestSelector","HavePermitData","HaveRequestData","_activePostBurnIds","ReportCard","CreatedBy","CreatedDate","ModifiedBy","ModifiedDate","ReportListContainer","GetReports","_state$Reports","RulesContainer","GetRules","UpdateRule","rulesUpdating","ResetRuleState","RuleActions","MergePermitsWarning","mergedPerson","MergePersonContainer","personChange","personOneObj","personTwoObj","updateMergedPersonArrays","PersonOneObj","PersonTwoObj","getEmptyPerson","personClone","personProp","personValue","personOneSelect","GetPersonDataForMerge","SetPersonOneId","personOne","checkAllTarget","focusField","personTwoSelect","SetPersonTwoId","personTwo","updateSelectedPerson","personKey","forceUpdate","setMergedValue","checkedInputIdx","personOneId","personTwoId","checkForMismatchingPersonType","ClearPersonIds","MergePeople","warning","mergedPersonInput","GetDataForPeopleMerge","personTwoSearch","resetChoices","PersonOneId","PersonTwoId","_this$state4","objId","_this$state5","PeopleForSelect","someValuesAreNotChosen","_state$Merge","REACT_APP_USER_GUIDE","HelpContainer","MergeAgenciesContainer","AgencyChange","AgencyOneObj","AgencyTwoObj","mergedAgency","getEmptyAgency","AgencyClone","AgencyProp","AgencyValue","AgencyOneSelect","GetAgencyData","SetObjectOneId","AgencyOne","AgencyTwoSelect","SetObjectTwoId","AgencyTwo","updateSelectedAgency","AgencyKey","AgencyObj","ClearObjectIds","AgencyOneId","AgencyTwoId","MergeAgencies","mergedAgencyInput","AgencyTwoSearch","agencyName","AgenciesForSelect","SmokeComplaintsContainer","BurnNoticeSubscriberContainer","DeactivateBurnNoticeSubscriber","NewBurnNoticeSubscriber","GetBurnNoticeSubscriber","LoggingIn","PrivateRoute","restrictUnverifiedAgent","restrictAgency","AdminRoute","AdminOrAgentRoute","rest","REACT_APP_ANALYTICS_ID","REACT_APP_ENV_NAME_DISPLAY","REACT_APP_VERSION","REACT_APP_BURN_NOTICES_ENABLED","IS_PRODUCTION","APP_IS_INSTALLED","matchMedia","EnvName","pointerEvents","App","showReloadApp","LogLastRoute","CheckAgentStatus","CheckTokenExpiration","appIsInstalled","DownloadLookupData","persistor","purge","UpdateAppVersion","_possibleConstructorReturn","ToggleNetworkNotifications","iOS","webkit","RouteHistory","userPays","Helmet","charSet","async","Routes","Route","path","element","LoginContainer","userDoesNotSign","MergePeopleContainer","_state$app","promiseFinally","shim","_CreateStore","rootSaga","sagaMiddleware","createSagaMiddleware","gaMiddleware","createMiddleware","GoogleAnalytics","logger","enhancers","applyMiddleware","composer","compose","composeWithDevTools","trace","traceLimit","outbox","actionIndex","_o$meta$offline","matchingAction","EnhanceOffline","createStore","persistStore","CreateStore","Provider","PersistGate","Router","URL","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.a89deb81.chunk.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 1473;","// In production, we register a service worker to serve assets from local cache.\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 the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\n// eslint-disable-next-line no-undef\nconst { NODE_ENV, PUBLIC_URL, } = process.env\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.1/8 is 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 default function register (config) {\n if (NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(PUBLIC_URL, window.location)\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/facebookincubator/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Lets 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://goo.gl/SC7cgQ'\n )\n })\n const event = new Event('serviceWorkerReady')\n window.dispatchEvent(event)\n } else {\n // Is not local host. 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 old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.')\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n const event = new Event('newContentAvailable')\n window.dispatchEvent(event)\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 .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister () {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister()\n })\n .catch((error) => {\n console.error(error.message)\n })\n }\n}\n","import { attr, Model, fk, } from 'redux-orm'\r\nimport * as Yup from 'yup'\r\n\r\nexport default class Address extends Model {\r\n static get modelName () {\r\n return 'Address'\r\n }\r\n\r\n toString () {\r\n const streetLines = []\r\n const cityStateZip = []\r\n if (this.StreetLine1) {\r\n streetLines.push(this.StreetLine1)\r\n }\r\n if (this.StreetLine2) {\r\n streetLines.push(this.StreetLine2)\r\n }\r\n if (this.StreetLine3) {\r\n streetLines.push(this.StreetLine3)\r\n }\r\n if (this.AddressCity) {\r\n cityStateZip.push(this.AddressCity + ',')\r\n }\r\n if (this.AddressState) {\r\n cityStateZip.push(this.AddressState)\r\n }\r\n if (this.AddressZipCode) {\r\n cityStateZip.push(`${this.AddressZipCode.slice(0,5)}-${this.AddressZipCode.slice(5)}`)\r\n }\r\n let addrStr = ''\r\n if (streetLines.length) {\r\n addrStr = streetLines.join('\\n')\r\n }\r\n if (cityStateZip.length) {\r\n addrStr += '\\n' + cityStateZip.join(' ')\r\n }\r\n return addrStr\r\n }\r\n\r\n static endpoint (action) {\r\n if (action === 'Geocode') {\r\n return 'Addresses/Geocode'\r\n }\r\n return 'Addresses'\r\n }\r\n\r\n static getBasicValidationSchema () {\r\n const {\r\n StreetLine1,\r\n StreetLine2,\r\n StreetLine3,\r\n AddressCity,\r\n AddressState,\r\n AddressZipCode,\r\n AddressTypeId,\r\n } = this.fields\r\n\r\n return Yup.object().shape({\r\n StreetLine1: Yup.string()\r\n .max(StreetLine1.opts.max, `Street address must be ${StreetLine1.opts.max} characters or less`)\r\n .required('Please enter a street address'),\r\n StreetLine2: Yup.string()\r\n .max(StreetLine2.opts.max, `Street address must be ${StreetLine2.opts.max} characters or less`)\r\n .ensure(),\r\n StreetLine3: Yup.string()\r\n .max(StreetLine3.opts.max, `Street address must be ${StreetLine3.opts.max} characters or less`)\r\n .ensure(),\r\n AddressCity: Yup.string()\r\n .max(AddressCity.opts.max, `City must be ${AddressCity.opts.max} characters or less`)\r\n .required('Please enter a city'),\r\n AddressState: Yup.string()\r\n .max(AddressState.opts.max, `Please enter a ${AddressState.opts.max}-letter state abbreviation`)\r\n .required('Please enter a state'),\r\n AddressZipCode: Yup.number()\r\n .max(AddressZipCode.opts.max, `Zip code must be ${AddressZipCode.opts.max} characters or less`)\r\n .required('Please enter a zip code'),\r\n AddressTypeId: Yup.number()\r\n .min(AddressTypeId.opts.min, 'Please select an address type')\r\n .required('Please select an address type'),\r\n })\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'AddressId',\r\n }\r\n }\r\n\r\n static getValidationSchema () {\r\n\r\n return Yup.object().shape({\r\n StreetLine1: Yup.string()\r\n .when([ 'AddressCity', 'AddressState', 'AddressZipCode', 'Force', ], {\r\n is: (AddressCity, AddressState, AddressZipCode, Force) => {\r\n return !!(AddressCity || AddressState || AddressZipCode) || Force\r\n },\r\n then: Yup.string().ensure()\r\n .max(this.fields.StreetLine1.opts.max, `Street address must be ${this.fields.StreetLine1.opts.max} characters or less`)\r\n .required('Please enter a street address'),\r\n }),\r\n AddressCity: Yup.string()\r\n .when([ 'StreetLine1', 'AddressState', 'AddressZipCode', 'Force', ], {\r\n is: (StreetLine1, AddressState, AddressZipCode, Force) => {\r\n return !!(StreetLine1 || AddressState || AddressZipCode) || Force\r\n },\r\n then: Yup.string().ensure()\r\n .max(this.fields.AddressCity.opts.max, `City must be ${this.fields.AddressCity.opts.max} characters or less`)\r\n .required('Please enter a city'),\r\n }),\r\n AddressState: Yup.string()\r\n .when([ 'StreetLine1', 'AddressCity', 'AddressZipCode', 'Force', ], {\r\n is: (StreetLine1, AddressCity, AddressZipCode, Force) => {\r\n return !!(StreetLine1 || AddressCity || AddressZipCode) || Force\r\n },\r\n then: Yup.string().ensure()\r\n .max(this.fields.AddressState.opts.max, `Please enter a ${this.fields.AddressState.opts.max}-letter state abbreviation`)\r\n .required('Please enter a state'),\r\n }),\r\n AddressZipCode: Yup.number()\r\n .when([ 'StreetLine1', 'AddressCity', 'AddressState', 'Force', ], {\r\n is: (StreetLine1, AddressCity, AddressState, Force) => {\r\n return !!(StreetLine1 || AddressCity || AddressState) || Force\r\n },\r\n then: Yup.number()\r\n .typeError('Zip code must be a number')\r\n .max(this.fields.AddressZipCode.opts.max, `Zip code must be ${this.fields.AddressZipCode.opts.max} characters or less`)\r\n .required('Please enter a zip code'),\r\n }),\r\n }, [ \r\n [ 'StreetLine1', 'AddressCity', ],\r\n [ 'StreetLine1', 'AddressState', ],\r\n [ 'StreetLine1', 'AddressZipCode', ],\r\n [ 'AddressCity', 'AddressState', ],\r\n [ 'AddressCity', 'AddressZipCode', ],\r\n [ 'AddressState', 'AddressZipCode', ],\r\n ])\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Common Properties\r\n AddressId : attr(),\r\n CreateDate : attr({ getDefault: () => new Date().toISOString(), }),\r\n CreateBy : attr(),\r\n UpdateDate : attr({ getDefault: () => new Date().toISOString(), }),\r\n UpdateBy : attr(),\r\n // Model-Specific Properties\r\n StreetLine1 : attr({ getDefault: () => '', max: 32, }),\r\n StreetLine2 : attr({ getDefault: () => '', max: 32, }),\r\n StreetLine3 : attr({ getDefault: () => '', max: 32, }),\r\n AddressCity : attr({ getDefault: () => '', max: 20, }),\r\n AddressState : attr({ getDefault: () => '', max: 2, }),\r\n AddressZipCode : attr({ getDefault: () => '', max: 999999999, }),\r\n AddressCountry : attr({ getDefault: () => '', }),\r\n Active : attr({ getDefault: () => true, }),\r\n\r\n // Relationships\r\n AddressTypeId: attr({\r\n getDefault : () => 1,\r\n min : 1, \r\n }),\r\n AddressType: fk({ \r\n to : 'AddressType', \r\n relatedName : 'Addresses', \r\n }),\r\n CountyId: fk({ \r\n to : 'County', \r\n relatedName : 'Addresses', \r\n as : 'County', \r\n }),\r\n }\r\n }\r\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class AddressType extends Model {\n static get modelName () {\n return 'AddressType'\n }\n\n toString () {\n return `${this.AddressTypeName}`\n }\n\n static endpoint () {\n return 'AddressTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'AddressTypeId',\n }\n }\n \n static get fields () {\n return {\n // Common Properties\n AddressTypeId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model Specific Properties\n AddressTypeName : attr(),\n AddressTypeDescription : attr(),\n }\n }\n}","import dayjs from 'dayjs'\nimport RelativeTime from 'dayjs/plugin/relativeTime'\nimport utc from 'dayjs/plugin/utc'\nimport timezone from 'dayjs/plugin/timezone'\n\ndayjs.extend(RelativeTime)\ndayjs.extend(utc)\ndayjs.extend(timezone)\n\n/**\n * Validates and optionally formats the provided date object\n * @param {Date|string} date\n * @param {string?} format\n * @returns {Dayjs|dayjs|Date|string}\n */\nexport const dateFormatter = (date, format = null, dateOnly = false) => {\n // Only construct and format the date if it is likely a full (enough) date value\n if (!date || (typeof date === 'string' && ((date.split('-').length < 3 && date.split('/').length < 3) || date.length < 8))) {\n return date\n }\n const _date = dayjs(date)\n if (_date.isValid() === false) {\n return date\n }\n if (format) {\n return _date.format(format)\n }\n if (dateOnly === true) {\n return _date.hour(0).minute(0).second(0).millisecond(0)\n }\n return _date\n}\n\n/**\n * Returns tomorrow's date as a string\n * @returns {string}\n */\nexport const getTomorrowsDate = (format) => {\n return dayjs().add(1, 'day').format(format || 'MM/DD/YYYY')\n}\n\n/**\n * Returns today's date as a string\n * @returns {string}\n */\nexport const getTodaysDate = (format) => {\n return dayjs().format(format || 'MM/DD/YYYY')\n}\n\n/**\n * Returns the current date/time as an object. \n * @returns {Object} the current date/time object\n */\nexport const getNow = () => {\n return dayjs()\n}\n\n/**\n * Creates a javascript date object set in Pacfic Timezone\n * @param {Date} dateUTC\n * @param {number} hours\n * @param {number} minutes\n * @param {number} seconds\n * @returns {Object} JS Date/time object set with America/LosAngeles timezone.\n */\nexport const pacificTimeZoneDate = (dateUTC, hours = 0, minutes = 0, seconds = 0) => {\n let dayDate = dayjs.tz(new Date(dateUTC), 'America/Los_Angeles')\n const date = dayDate.toDate()\n date.setHours(hours)\n date.setMinutes(minutes)\n date.setSeconds(seconds)\n return date\n}\n\n/**\n * Returns the current date/time as an object. \n * @returns {Object} the current date/time object\n */\nexport const getDateInXDays = (daysFromNow, format) => {\n return dayjs().add(daysFromNow, 'day').format(format || 'YYYY-MM-DD')\n}\n\n\n/**\n * Returns `true` if `secondDate` is later than `firstDate`, otherwise returns `false`\n * @param {string} firstDate - The likely earlier date\n * @param {string} secondDate - The likely later date to confirm is later\n * @returns {boolean}\n */\nexport const isAfter = (firstDate, secondDate) => {\n return dayjs(secondDate).isAfter(firstDate)\n}\n","import { convertToRaw, convertFromRaw, ContentState, EditorState, } from 'draft-js'\n\nexport const currencyFormatter = new Intl.NumberFormat('en-US', {\n style : 'currency',\n currency : 'USD',\n minimumFractionDigits : 2,\n})\n\nexport {\n dateFormatter,\n getTodaysDate,\n getTomorrowsDate,\n getDateInXDays,\n getNow,\n pacificTimeZoneDate,\n isAfter,\n} from './datetimes'\n\n\n/**\n * Returns a boolean indicating whether or not the property exists in the provided object.\n * @param {object} obj - The object to check the existance of a property\n * @param {string} prop - The property to check the existance of\n * @returns {boolean}\n */\nexport const objHasProp = (obj, prop) => {\n if (obj === undefined || obj === null || typeof(obj) !== 'object') {\n console.warn('Attempted object propert check on a non-object')\n return false\n }\n return Object.prototype.hasOwnProperty.call(obj, prop)\n}\n\nconst scrollToFirst = scope => {\n if (!scope) {\n return false\n }\n let nodes\n if (scope.indexOf('#') > -1) {\n const [ id, _class, ] = scope.split(' ')\n const root = document.getElementById(id.replace('#', ''))\n if (!root) {\n return\n }\n nodes = root.querySelectorAll(_class)\n }\n else {\n nodes = document.querySelectorAll(scope)\n }\n const els = Array.prototype.slice.call(nodes).filter(d => !!d.offsetParent)\n if (!els.length) {\n return false\n }\n const targetEl = els[0]\n const { top, } = targetEl.getBoundingClientRect()\n window.scrollTo({ top: (window.pageYOffset + top) - 150, behavior: 'smooth', })\n if (targetEl.previousElementSibling) {\n const nodename = targetEl.previousElementSibling.nodeName.toLowerCase()\n if (nodename === 'input' || nodename === 'select') {\n targetEl.previousElementSibling.focus()\n }\n }\n return true\n}\n\nexport const scrollToErrors = (scope = '') => {\n let domScope = '.invalid-feedback'\n if (scope) {\n domScope = `${scope} ${domScope}`\n }\n const hadErrors = scrollToFirst(domScope)\n if (hadErrors) {\n return\n }\n domScope = '.is-invalid'\n if (scope) {\n domScope = `${scope} ${domScope}`\n }\n scrollToFirst(domScope)\n}\n\nexport function queryParamsToObject () {\n const params = new URLSearchParams(window.location.search)\n\n const paramsObj = {}\n\n for (let entry of params.entries()) {\n paramsObj[entry[0]] = entry[1]\n }\n\n return paramsObj\n}\n\nexport function objectToQueryParams (obj) {\n return Object.keys(obj)\n .map(k => `${k}=${obj[k]}`)\n .join('&')\n}\n\nexport function getArrayValueFromText (arr, text) {\n const obj = arr.filter(a => a.Text.toLowerCase() === text.toLowerCase())[0]\n if (obj) {\n return obj.Value\n }\n return null\n}\n\n/**\n * Removes an item from an array if it exists in the array.\n * Returns a new array with the item removed.\n * @param {Array} arr \n * @param {Object} item \n */\nexport function removeItemFromArray (arr, item) {\n // Get a copy of unique array items\n const newArr = [ ...new Set(arr), ]\n // Get the index of the item in the array\n const idx = newArr.indexOf(item)\n // If it's there, remove it\n if (idx > -1) {\n newArr.splice(idx, 1)\n }\n return newArr\n}\n\n/**\n * Creates a new array of unique items with the provided item included.\n * @param {Array} arr \n * @param {Object} item\n * @returns {Array}\n */\nexport function addItemToArray (arr, item) {\n // Get a copy of the array items\n const newArr = [ ...arr, item, ]\n return [ ...new Set(newArr), ]\n}\n\nexport const formatPhone = (phone) => {\n if (!phone) {\n return\n }\n if (phone.length === 11) {\n return `+${phone.substring(0, 1)} (${phone.substring(1,4)}) ${phone.substring(4, 7)}-${phone.substring(7)}`\n }\n else if (phone.length === 10) {\n return `(${phone.substring(0, 3)}) ${phone.substring(3, 6)}-${phone.substring(6)}`\n }\n return phone\n}\n\nexport const importAllImages = (r) => {\n let images = {}\n r.keys().map((item) => images[item.replace('./', '')] = r(item) )\n return images\n}\n\n/**\n * extract plain text and json formatted string version of\n * the provided draftjs editor state\n * @param {EditorState} editorState a draftjs EditorState to read\n * @returns an array with elements [0] : plain text string, [1] : json string of content from the provided editor state\n */\nexport const extractContentStateValues = (editorState) => {\n let formattedContent = '', plainTextContent = ''\n if (editorState){\n // try to get current content and convert format state to JSON\n // as well as plain text\n try {\n const content = editorState.getCurrentContent()\n formattedContent = JSON.stringify(convertToRaw(content))\n plainTextContent = content.getPlainText()\n }\n catch (e)\n {\n console.error(e)\n }\n }\n return [ plainTextContent, formattedContent, ]\n}\n\n/**\n * convert from either a json content state string or \n * a plain text string to a draftjs editor state\n * returns an empty editorstate if nothing else\n * @param {string} contentString JSON or plain text string to initialize editor state with\n * @returns a draftjs EditorState populated with the provided content\n */\nexport const parseContentStateValue = (contentString) => {\n let contentState = null\n let parsed = false\n if (contentString) {\n // try to parse as JSON and create a ContentState\n try {\n const jsonContent = JSON.parse(contentString)\n contentState = convertFromRaw(jsonContent)\n parsed = true\n }\n catch {\n parsed = false\n }\n // if we didn't parse correctly, try treating it as a plain text string\n if (!parsed) {\n try {\n contentState = ContentState.createFromText(contentString)\n parsed = true\n } catch (e) {\n console.error(e)\n }\n }\n }\n\n // as a last resort just create an empty ContentState\n if (!contentState || !parsed) {\n contentState = ContentState.createFromText('')\n }\n // create an EditorState with the ContentState we created\n return EditorState.createWithContent(contentState)\n}","import React from 'react'\nimport ReactDomServer from 'react-dom/server'\nimport { dateFormatter, } from '../utilities'\n\nconst ICON = (className, asHtml) => {\n const html = \n if (asHtml === true) {\n return html\n }\n return ReactDomServer.renderToString(html)\n}\n\nconst SUCCESS_ICON = ICON('fa-check-circle text-success')\nconst DANGER_ICON = ICON('fa-times-circle text-danger')\n\nexport const renderCheckIcon = (data, drawType, asHtml) => {\n if (drawType !== 'display') {\n return `${data}`\n }\n if (asHtml === true) {\n if (data) {\n return ICON('fa-check-circle text-success', asHtml)\n }\n }\n return data\n ? SUCCESS_ICON\n : ''\n}\n\nexport const renderCheckOrXIcon = (data, drawType, asHtml) => {\n if (drawType !== 'display') {\n return `${data}`\n }\n if (asHtml === true) {\n if (data) {\n return ICON('fa-check-circle text-success', asHtml)\n }\n return ICON('fa-times-circle text-danger', asHtml)\n }\n return data\n ? SUCCESS_ICON\n : DANGER_ICON\n}\n\nexport const renderDate = (data, drawType) => {\n if (drawType !== 'display') {\n return data\n }\n return dateFormatter(data, 'MMM DD, YYYY')\n}\n\nexport const renderDateTime = (data, drawType) => {\n if (drawType !== 'display') {\n return data\n }\n const dateTime = dateFormatter(data, 'MMM DD, YYYY HH:mm:ss')\n if (dateTime && dateTime.substring(dateTime.length - 8) === '00:00:00') {\n return dateTime.substring(0, dateTime.length - 9)\n }\n return dateTime\n}\n\nexport const formatLegalDesc = row => {\n let legalDesc = ''\n if (row.LegalDescQ1) {\n legalDesc += row.LegalDescQ1 + ' of '\n }\n if (row.LegalDescQ2) {\n legalDesc += row.LegalDescQ2 + ' of '\n }\n if (row.LegalDescSection) {\n legalDesc += ' S' + row.LegalDescSection\n }\n if (row.LegalDescTownship) {\n legalDesc += ' T' + row.LegalDescTownship\n }\n if (row.LegalDescRange) {\n legalDesc += ' R' + row.LegalDescRange\n }\n if (row.LegalDescDirection) {\n legalDesc += ' ' + row.LegalDescDirection\n }\n return legalDesc\n}\n\nexport const renderTons = (data, drawType) => {\n if (drawType !== 'display') {\n return data\n }\n if (!data) {\n return '' \n }\n return `${data.toLocaleString()} tons`\n}\n\nexport const renderAcres = (data, drawType) => {\n if (drawType !== 'display') {\n return data\n }\n if (!data) {\n return '' \n }\n return `${data.toLocaleString()} acres`\n}\n\nexport const renderLatLong = (data, drawType, row) => {\n if (drawType !== 'display') {\n return ''\n }\n \n if (!row || !row.Latitude || !row.Longitude) {\n return ''\n }\n \n return `${row.Latitude}, ${row.Longitude}`\n}\n\nexport const formatAddress = address => {\n if (!address) {\n return address\n }\n const streetLines = []\n const cityStateZip = []\n if (address.StreetLine1) {\n streetLines.push(address.StreetLine1)\n }\n if (address.StreetLine2) {\n streetLines.push(address.StreetLine2)\n }\n if (address.StreetLine3) {\n streetLines.push(address.StreetLine3)\n }\n if (address.AddressCity) {\n cityStateZip.push(address.AddressCity + ',')\n }\n if (address.AddressState) {\n cityStateZip.push(address.AddressState)\n }\n if (address.AddressZipCode) {\n cityStateZip.push(address.AddressZipCode)\n }\n let addrStr = ''\n if (streetLines.length) {\n addrStr = streetLines.join('\\n')\n }\n if (cityStateZip.length) {\n addrStr += '\\n' + cityStateZip.join(' ')\n }\n return addrStr\n}\n","import { attr, Model, fk, } from 'redux-orm'\nimport * as Yup from 'yup'\nimport { renderCheckOrXIcon, } from '../utilities/columnHelpers'\n\nexport default class Agency extends Model {\n static get modelName () {\n return 'Agency'\n }\n\n toString () {\n let name = ''\n if (this.AgencyName) {\n name = name + this.AgencyName\n }\n if (this.AgencySubName1) {\n name = name + ' - ' + this.AgencySubName1\n }\n if (this.AgencySubName2) {\n name = name + ' - ' + this.AgencySubName2\n }\n return name\n }\n\n static endpoint () {\n return 'Agencies'\n }\n\n static getValidationSchema () {\n const {\n AgencyName,\n AgencySubName1,\n AgencySubName2,\n AgencyOtherName,\n AgencyAbbreviation,\n } = this.fields\n\n const val = Yup.object().shape({\n AgencyName: Yup.string()\n .max(AgencyName.opts.max, `Agency name name must be ${AgencyName.opts.max} characters or less`)\n .required('Please enter an agency name'),\n AgencySubName1: Yup.string()\n .max(AgencySubName1.opts.max, `Sub name 1 must be ${AgencySubName1.opts.max} characters or less`)\n .nullable(),\n AgencySubName2: Yup.string()\n .max(AgencySubName2.opts.max, `Sub name 2 name must be ${AgencySubName2.opts.max} characters or less`)\n .nullable(),\n AgencyOtherName: Yup.string()\n .max(AgencyOtherName.opts.max, `Other name must be ${AgencyOtherName.opts.max} characters or less`)\n .nullable(),\n AgencyAbbreviation: Yup.string()\n .max(AgencyAbbreviation.opts.max, `Abbreviation name must be ${AgencyAbbreviation.opts.max} characters or less`)\n .nullable(),\n })\n return val\n }\n\n static getDataTablesColumns () {\n return [\n {\n title : 'Id',\n type : 'num',\n data : 'AgencyId',\n width : 15,\n },\n {\n title : 'Agency Name',\n data : 'AgencyName',\n },\n {\n title : 'Abbrev',\n data : 'AgencyAbbreviation',\n defaultContent : '',\n },\n {\n title : 'Auto Region Approval',\n data : 'AutoRegionApproval',\n defaultContent : '',\n render : renderCheckOrXIcon,\n },\n {\n title : 'Email',\n data : 'Email',\n },\n {\n title : 'Phone',\n data : 'Phone',\n },\n {\n title : 'Pays by Voucher',\n data : 'PaysByVoucher',\n defaultContent : '',\n render : renderCheckOrXIcon,\n },\n ]\n }\n \n static get options () {\n return {\n idAttribute: 'AgencyId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n AgencyId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n AgencyName : attr({ max: 50, }),\n AgencySubName1 : attr({ max: 50, }),\n AgencySubName2 : attr({ max: 50, }),\n AgencyOtherName : attr({ max: 50, }),\n AgencyAbbreviation : attr({ max: 4, }),\n AutoRegionApproval : attr(),\n PaysByVoucher : attr(),\n\n // Relationships\n AddressId : fk({ to: 'Address', relatedName: 'Agencies', as: 'Address', }),\n PhoneId : fk({ to: 'Phone', relatedName: 'Agencies', as: 'Phone', }),\n EmailId : fk({ to: 'Email', relatedName: 'Agencies', as: 'Email', }),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class AlertPreference extends Model {\n static get modelName () {\n return 'AlertPreference'\n }\n\n static endpoint () {\n return 'AlertPreferences'\n }\n\n static get options () {\n return {\n idAttribute: 'AlertPreferenceId',\n }\n }\n\n static get fields () {\n return {\n AlertPreferenceId : attr(),\n AlertPreferenceName : attr(),\n AlertPreferenceDescription : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class AlertMethod extends Model {\n static get modelName () {\n return 'AlertMethod'\n }\n\n static endpoint () {\n return 'AlertMethods'\n }\n\n static get options () {\n return {\n idAttribute: 'AlertMethodId',\n }\n }\n\n static get fields () {\n return {\n AlertMethodId : attr(),\n AlertMethodName : attr(),\n AlertMethodDescription : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class ApplicationUser extends Model {\n static get modelName () {\n return 'ApplicationUser'\n }\n\n toString () {\n return `${this.FirstName} ${this.LastName}`\n }\n\n static getDataTablesColumns () {\n const cols = [\n {\n title : 'Person Id',\n type : 'num',\n data : 'PersonId',\n width : 15,\n },\n {\n title : 'UserName',\n data : 'UserName',\n },\n {\n title : 'First Name',\n data : 'FirstName',\n },\n {\n title : 'Last Name',\n data : 'LastName',\n },\n {\n title : 'Claim Type',\n data : 'ClaimType',\n },\n {\n title : 'Claim Value',\n data : 'ClaimValue',\n },\n ]\n return cols\n }\n\n static get options () {\n return {\n idAttribute: 'PersonId',\n }\n }\n\n static get fields () {\n return {\n PersonId : attr(),\n FirstName : attr(),\n LastName : attr(),\n UserName : attr(),\n ClaimType : attr(),\n ClaimValue : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class ArrivalTime extends Model {\n static get modelName () {\n return 'ArrivalTime'\n }\n\n toString () {\n return `${this.ArrivalTimeName}`\n }\n\n static get options () {\n return {\n idAttribute: 'ArrivalTimeId',\n }\n }\n\n static get fields () {\n return {\n ArrivalTimeId : attr(),\n ArrivalTimeName : attr({ getDefault: () => '', }),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnIgnitionType extends Model {\n static get modelName () {\n return 'BurnIgnitionType'\n }\n\n toString () {\n return `${this.BurnIgnitionTypeName}`\n }\n\n static endpoint () {\n return 'BurnIgnitionTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnIgnitionTypeId',\n }\n }\n\n static get fields () {\n return {\n BurnIgnitionTypeId : attr({ type: 'number', }),\n BurnIgnitionTypeName : attr(),\n BurnIgnitionTypeDescription : attr(),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, fk, Model, many, } from 'redux-orm'\nimport { number, string, } from 'prop-types'\nimport * as Yup from 'yup'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class BurnNoticeSubscriber extends Model {\n static get modelName () {\n return 'BurnNoticeSubscriber'\n }\n\n toString () {\n return `${(this.BurnNoticeSubscriberFirstName || '').trim()} ${(this.BurnNoticeSubscriberLastName || '').trim()}`.trim()\n }\n\n static endpoint ({ BurnNoticeSubscriberId, }) {\n let burnNoticeSubscriberEndpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscriber`\n if (Number.isInteger(BurnNoticeSubscriberId)) {\n burnNoticeSubscriberEndpoint += `/${BurnNoticeSubscriberId}/UserInfo`\n }\n return burnNoticeSubscriberEndpoint\n }\n\n static getDataTablesColumns () {\n return [ {\n title : 'Id',\n type : 'num',\n data : 'BurnNoticeSubscriberId',\n width : 15,\n },\n {\n title : 'First Name',\n data : 'BurnNoticeSubscriberFirstName',\n },\n {\n title : 'Last Name',\n data : 'BurnNoticeSubscriberLastName',\n },\n {\n title : 'Email',\n data : 'EmailAddress',\n },\n {\n title : 'Phone',\n data : 'PhoneNumber',\n visible : false,\n },\n {\n title : 'Opt Out',\n data : 'OptOut',\n }, ]\n }\n\n static getValidationSchema () {\n\n return Yup.object().shape({\n BurnNoticeSubscriberFirstName: Yup.string()\n .ensure().required('First name is required'),\n BurnNoticeSubscriberLastName: Yup.string()\n .ensure().required('Last name is required'),\n })\n }\n\n static get options () {\n return {\n idAttribute: 'BurnNoticeSubscriberId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n BurnNoticeSubscriberId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n BurnNoticeSubscriberFirstName : attr({ max: 80, }),\n BurnNoticeSubscriberLastName : attr({ max: 80, }),\n \n // Relationships\n \n EmailId : fk({ to: 'Email', relatedName: 'BurnNoticeSubscribers', as: 'Email', }),\n Phones : many({ \n to : 'Phone',\n relatedName : 'BurnNoticeSubscribers',\n }),\n }\n }\n\n static get propTypes () {\n return {\n BurnNoticeSubscriberId : number,\n CreateDate : string,\n UpdateDate : string,\n }\n }\n}","import { attr, fk, many, Model, } from 'redux-orm'\r\nimport { number, } from 'prop-types'\r\nimport * as Yup from 'yup'\r\nimport { renderDate, } from '../utilities/columnHelpers'\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nexport default class BurnPermit extends Model {\r\n static get modelName () {\r\n return 'BurnPermit'\r\n }\r\n\r\n toString () {\r\n return `${this.BurnPermitNumber || this.BurnPermitId}`\r\n }\r\n\r\n static endpoint () {\r\n return `${REACT_APP_SERVER_URL}BurnPermits`\r\n }\r\n\r\n toEmptyJson (includeId = true) {\r\n const obj = {}\r\n const _this = this.getClass()\r\n const attrs = Object.entries(_this.fields).filter((f) => {\r\n return f[1].constructor.name === 'Attribute' && (!includeId && f[0] !== _this.idAttribute)\r\n })\r\n for(let i = 0, len = attrs.length; i < len; i++){\r\n obj[attrs[i][0]] = null\r\n }\r\n return obj\r\n }\r\n\r\n static getValidationSchema () {\r\n return Yup.object().shape({\r\n AgentId : Yup.number(),\r\n BurnerPermitAddressId : Yup.number()\r\n .when(\r\n 'AgentId', {\r\n is: (a) => {\r\n return !a || (a && (a < 0))\r\n }, \r\n then: Yup.number().min(1, 'Please select an address').required('Please select an address'),\r\n }\r\n ),\r\n BurnerPermitPrimaryPhoneId: Yup.number()\r\n .when(\r\n 'AgentId', {\r\n is: (a) => {\r\n return !a || (a && (a < 0))\r\n }, \r\n then: Yup.number().min(1, 'Please select a phone number').required('Please select a phone number'),\r\n }\r\n ),\r\n })\r\n }\r\n\r\n static getDataTablesColumns () {\r\n return [\r\n {\r\n title : '',\r\n data : 'BurnPermitId',\r\n orderable : false,\r\n searchable : false,\r\n targets : [ 0, ],\r\n width : 15,\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data\r\n }\r\n return ``\r\n },\r\n },\r\n {\r\n title : 'Application Id',\r\n data : 'BurnPermitId',\r\n type : 'num',\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data\r\n }\r\n return `${data}`\r\n },\r\n },\r\n {\r\n title : 'Permit Number',\r\n data : 'BurnPermitNumber',\r\n defaultContent : '',\r\n },\r\n {\r\n title : 'Landowner',\r\n data : 'LandownerName',\r\n defaultContent : '',\r\n width : '150px',\r\n },\r\n {\r\n title : 'Burner',\r\n data : 'Burner',\r\n defaultContent : '',\r\n width : '150px',\r\n },\r\n {\r\n title : 'Application Status',\r\n data : 'BurnPermitApplicationStatus.StatusName',\r\n defaultContent : '',\r\n width : '75px',\r\n },\r\n {\r\n title : 'Application Status Date',\r\n data : 'BurnPermitApplicationStatus.StatusDate',\r\n defaultContent : '',\r\n render : renderDate,\r\n width : '75px',\r\n },\r\n {\r\n title : 'Permit Status',\r\n data : 'BurnPermitStatus.StatusName',\r\n defaultContent : '',\r\n width : '75px',\r\n },\r\n {\r\n title : 'Permit Status Date',\r\n data : 'BurnPermitStatus.StatusDate',\r\n defaultContent : '',\r\n render : renderDate,\r\n width : '75px',\r\n },\r\n {\r\n title : 'Expiration Date',\r\n data : 'BurnPermitExpirationDate',\r\n defaultContent : '',\r\n render : renderDate,\r\n width : '75px',\r\n },\r\n {\r\n title : 'County',\r\n data : 'County',\r\n defaultContent : '',\r\n },\r\n {\r\n title : 'Legal Description',\r\n data : 'LegalDescription',\r\n defaultContent : '',\r\n },\r\n {\r\n title : 'Burn Address',\r\n data : 'BurnAddress',\r\n defaultContent : '',\r\n width : '200px',\r\n },\r\n {\r\n title : 'Total Tonnage',\r\n data : 'TotalPermitTonnage',\r\n defaultContent : '',\r\n },\r\n {\r\n title : 'Latitude',\r\n data : 'Latitude',\r\n defaultContent : '',\r\n type : 'num',\r\n },\r\n {\r\n title : 'Longitude',\r\n data : 'Longitude',\r\n defaultContent : '',\r\n type : 'num',\r\n },\r\n ]\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'BurnPermitId',\r\n }\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Common Properties\r\n BurnPermitId : attr({ inputType: 'number', inputLabel: 'Burn Permit Id', }),\r\n CreateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateDate : attr(),\r\n UpdateBy : attr(),\r\n\r\n // Model-Specific Properties\r\n BurnPermitExpirationDate : attr(),\r\n BurnPermitEstimatedFee : attr(),\r\n BurnPermitNumber : attr(),\r\n BurnPermitValidDate : attr(),\r\n MailPermitToAgentFlag : attr(),\r\n MailPermitToLandownerFlag : attr(),\r\n TotalPermitTonnage : attr(),\r\n SuspensionStartDate : attr(),\r\n SuspensionEndDate : attr(),\r\n SuspensionComment : attr(),\r\n\r\n // Relationships\r\n AgencyId : fk({ to: 'Agency', relatedName: 'AgencyPermit', as: 'Agency', }),\r\n AgentId : fk({ to: 'Person', relatedName: 'AgentPermit', as: 'Agent', }),\r\n AgentPermitAddressId : fk({ to: 'Address', relatedName: 'AgentPermit', as: 'AgentPermitAddress', }),\r\n AgentPermitPrimaryPhoneId : fk({ to: 'Phone', relatedName: 'AgentPermitPrimary', as: 'AgentPermitPrimaryPhone', }),\r\n AgentPermitSecondaryPhoneId : fk({ to: 'Phone', relatedName: 'AgentPermitSecondary', as: 'AgentPermitSecondaryPhone', }),\r\n BurnerId : fk({ to: 'Person', relatedName: 'BurnerPermit', as: 'Burner', } ),\r\n BurnerPermitAddressId : fk({ to: 'Address', relatedName: 'BurnerPermit', as: 'BurnerPermitAddress', }),\r\n BurnerPermitPrimaryPhoneId : fk({ to: 'Phone', relatedName: 'BurnPermitPrimary', as: 'BurnerPermitPrimaryPhone', }),\r\n BurnerPermitSecondaryPhoneId : fk({ to: 'Phone', relatedName: 'BurnPermitSecondary', as: 'BurnerPermitSecondaryPhone', }), \r\n BurnPermitAreaId : fk({ to: 'BurnPermitArea', relatedName: 'BurnPermits', as: 'BurnPermitArea', }),\r\n BurnPermitFuelId : fk({ to: 'BurnPermitFuel', relatedName: 'BurnPermits', as: 'BurnPermitFuel', }),\r\n BurnPermitLocationId : fk({ to: 'BurnPermitLocation', relatedName: 'BurnPermits', as: 'BurnPermitLocation', }),\r\n BurnPermitSiteId : fk({ to: 'BurnPermitSite', relatedName: 'BurnPermits', as: 'BurnPermitSite', }),\r\n ForestHealthExemptId : fk({ to: 'ForestHealthExempt', relatedName: 'BurnPermits', as: 'ForestHealthExempt', }),\r\n\r\n BurnPermitApplicationStatuses : many({ to: 'BurnPermitApplicationStatus', relatedName: 'ApplicationStatuses', through: 'BurnPermitApplicationStatusXref', }),\r\n BurnPermitConditions : many({ to: 'BurnPermitCondition', relatedName: 'BurnPermits', through: 'BurnPermitConditionXref', }),\r\n BurnPermitStatuses : many({ to: 'BurnPermitStatus', relatedName: 'PermitStatuses', through: 'BurnPermitStatusXref', }),\r\n }\r\n }\r\n\r\n static get propTypes () {\r\n return {\r\n BurnPermitId: number,\r\n }\r\n }\r\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnPermitApplicationStatus extends Model {\n static get modelName () {\n return 'BurnPermitApplicationStatus'\n }\n\n toString () {\n return `${this.BurnPermitApplicationStatusName}`\n }\n\n static endpoint () {\n return 'BurnPermitApplicationStatuses'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitApplicationStatusId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnPermitApplicationStatusId : attr(),\n BurnPermitApplicationStatusName : attr({ getDefault: () => '', }),\n BurnPermitApplicationStatusDescription : attr({ getDefault: () => '', }),\n \n // Audit Properties\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\r\n\r\nexport default class BurnPermitApplicationStatusXref extends Model {\r\n static get modelName () {\r\n return 'BurnPermitApplicationStatusXref'\r\n }\r\n\r\n toString () {\r\n return `${this.BurnPermitApplicationStatusXrefName}`\r\n }\r\n\r\n static endpoint (permitId, history = false) {\r\n const url = `BurnPermits/${permitId}/ApplicationStatus`\r\n if (history === false) {\r\n return url\r\n }\r\n return `${url}/History`\r\n }\r\n \r\n static deleteEndpoint (permitId, xrefId) {\r\n const url = `BurnPermits/${permitId}/ApplicationStatus/${xrefId}`\r\n return url\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'BurnPermitApplicationStatusXrefId',\r\n }\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Model-Specific Properties\r\n BurnPermitApplicationStatusXrefId : attr(),\r\n BurnPermitId : fk ({ to: 'BurnPermit', relatedName: 'BurnPermitApplicationStatusXrefs', as: 'BurnPermit', }),\r\n BurnPermitApplicationStatusId : fk({ to: 'BurnPermitApplicationStatus', relatedName: 'BurnPermitApplicationStatusXrefs', as: 'BurnPermitApplicationStatus', }),\r\n StatusDate : attr(),\r\n Comment : attr(),\r\n AssignedToId : fk({ to: 'ApplicationUser', relatedName: 'ApplicationUsers', as: 'AssignedTo', }),\r\n SiteInspected : attr(),\r\n InternalOnly : attr(),\r\n ApplicationSection : attr(),\r\n \r\n // Audit Properties\r\n CreateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateDate : attr(),\r\n UpdateBy : attr(),\r\n }\r\n }\r\n}","import { attr, many, Model, } from 'redux-orm'\nimport * as Yup from 'yup'\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class BurnPermitArea extends Model {\n static get modelName () {\n return 'BurnPermitArea'\n }\n\n toString () {\n return `${this.BurnPermitAreaId}`\n }\n\n static endpoint () {\n return `${REACT_APP_SERVER_URL}BurnPermitAreas`\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitAreaId',\n }\n }\n\n static get validationSchema () {\n\n return Yup.object().shape({\n HarvestAcres: Yup.number()\n .min(.01, 'Acres must be a number greater than 0.')\n .required('Acres must be a number greater than 0.'),\n BurnTypes: Yup.array()\n .min(1, 'You must choose one or more burn type.')\n .required('You must choose one or more burn type.'),\n })\n }\n\n static get fields () {\n return {\n // Common Properties\n BurnPermitAreaId : attr({ type: 'number', }),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n \n // Model-Specific properties\n HarvestAcres : attr({ type: 'number', inputType: 'number', inputLabel: 'Size of harvest area (acres)', }),\n // Relationships\n BurnTypes : many({ to: 'BurnType', relatedName: 'BurnPermitAreas', }),\n }\n }\n}","import { attr, fk, Model, } from 'redux-orm'\nimport * as Yup from 'yup'\n\nexport default class BurnPermitCondition extends Model {\n static get modelName () {\n return 'BurnPermitCondition'\n }\n\n static endpoint () {\n return 'BurnPermitConditions'\n }\n\n static getValidationSchema () {\n const {\n BurnPermitConditionName,\n BurnPermitConditionDescription,\n } = this.fields\n\n return Yup.object().shape({\n BurnPermitConditionName: Yup.string()\n .max(BurnPermitConditionName.opts.max, `Condition name name must be ${BurnPermitConditionName.opts.max} characters or less`)\n .required('Please enter a condition name.'),\n BurnPermitConditionDescription: Yup.string()\n .max(BurnPermitConditionDescription.opts.max, `Description must be ${BurnPermitConditionDescription.opts.max} characters or less`)\n .required('Please enter a condition description.'),\n })\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitConditionId',\n }\n }\n\n static get fields () {\n return {\n BurnPermitConditionId : attr(),\n // Common fields\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n // Foriegn keys\n ParentConditionId : fk({ to: 'BurnPermitCondition', as: 'ParentCondition', relatedName: 'ChildConditions', }),\n // Model-specific fields\n BurnPermitConditionName : attr({ max: 64, }),\n BurnPermitConditionDescription : attr({ max: 256, }),\n // Non database field\n Category : attr(),\n }\n }\n}","// Yup uses curly templates for error messages.\r\n/* eslint-disable no-template-curly-in-string */\r\nimport { attr, Model, fk, many, } from 'redux-orm'\r\nimport * as Yup from 'yup'\r\n\r\n\r\nconst numberSchema = prefix => {\r\n return Yup.number()\r\n .required(prefix + ' is required')\r\n .positive(prefix + ' must be positive')\r\n .typeError(prefix + ' must be a number')\r\n}\r\n\r\n\r\nexport default class BurnPermitConditionXref extends Model {\r\n static get modelName () {\r\n return 'BurnPermitConditionXref'\r\n }\r\n\r\n static endpoint () {\r\n return 'BurnPermitConditionXrefs'\r\n }\r\n\r\n static mapFieldToName (fieldName) {\r\n switch (fieldName) {\r\n case 'ProhibitedFrom':\r\n return 'Burning prohibited from'\r\n case 'ProhibitedThrough':\r\n return 'Burning prohibited through'\r\n case 'MaxWindSpeedMph':\r\n return 'Wind speed'\r\n case 'MinRelHumidityPercent':\r\n return 'Relative humidity'\r\n case 'NoIgnitionFuelStart':\r\n return 'No ignition before'\r\n case 'NoIgnitionFuelEnd':\r\n return 'No ignition after'\r\n case 'DaysToExtinguish':\r\n return 'Extinguish days'\r\n case 'MaxPilesBurnedAtOnce':\r\n return 'Max piles'\r\n case 'MaxDiameterInches':\r\n return 'Pile diameter'\r\n case 'MinWidthFireBreakFeet':\r\n return 'Fire break width'\r\n case 'NumberOfPeopleRequired':\r\n return 'Number of people'\r\n case 'NumberOfPumpCans':\r\n return 'Pump cans'\r\n case 'PumpTrailerCapacityGallons':\r\n return 'Pump truck/trailer'\r\n case 'MaxPermitsToBurnAtOnce':\r\n return 'Multiple permits'\r\n case 'MaxRequestTonnage':\r\n return 'Smoke management approval limit'\r\n case 'OtherCondition':\r\n return 'Other conditions'\r\n default:\r\n return null\r\n }\r\n }\r\n \r\n static mapConditionValueKey (conditionName) {\r\n let valueKey = null\r\n let isXref = false\r\n switch (conditionName) {\r\n case 'Burning prohibited from':\r\n valueKey = 'ProhibitedFrom'\r\n break\r\n case 'Burning prohibited through':\r\n valueKey = 'ProhibitedThrough'\r\n break\r\n case 'Wind direction':\r\n isXref = true\r\n valueKey = 'BurnPermitWindDirectionConditionXref'\r\n break\r\n case 'Wind speed':\r\n valueKey = 'MaxWindSpeedMph'\r\n break\r\n case 'Relative humidity':\r\n valueKey = 'MinRelHumidityPercent'\r\n break\r\n case 'Days of the week':\r\n isXref = true\r\n valueKey = 'BurnPermitProhibitedDayConditionXref'\r\n break\r\n case 'No ignition before':\r\n valueKey = 'NoIgnitionFuelStart'\r\n break\r\n case 'No ignition after':\r\n valueKey = 'NoIgnitionFuelEnd'\r\n break\r\n case 'Extinguish days':\r\n valueKey = 'DaysToExtinguish'\r\n break\r\n case 'Max piles':\r\n valueKey = 'MaxPilesBurnedAtOnce'\r\n break\r\n case 'Pile diameter':\r\n valueKey = 'MaxDiameterInches'\r\n break\r\n case 'Fire break width':\r\n valueKey = 'MinWidthFireBreakFeet'\r\n break\r\n case 'Number of people':\r\n valueKey = 'NumberOfPeopleRequired'\r\n break\r\n case 'Pump cans':\r\n valueKey = 'NumberOfPumpCans'\r\n break\r\n case 'Pump truck/trailer':\r\n valueKey = 'PumpTrailerCapacityGallons'\r\n break\r\n case 'Equipment requirements':\r\n isXref = true\r\n valueKey = 'BurnPermitEquipmentConditionXref'\r\n break\r\n case 'Multiple permits':\r\n valueKey = 'MaxPermitsToBurnAtOnce'\r\n break\r\n case 'Smoke management approval limit':\r\n valueKey = 'MaxRequestTonnage'\r\n break\r\n case 'Other conditions':\r\n valueKey = 'OtherCondition'\r\n break\r\n default:\r\n break\r\n }\r\n return { valueKey, isXref, }\r\n }\r\n\r\n static getValidationSchema (conditionName) {\r\n const {\r\n ProhibitedFrom,\r\n ProhibitedThrough,\r\n MaxWindSpeedMph,\r\n MinRelHumidityPercent,\r\n NoIgnitionFuelStart,\r\n NoIgnitionFuelEnd,\r\n DaysToExtinguish,\r\n MaxPilesBurnedAtOnce,\r\n MaxDiameterInches,\r\n MinWidthFireBreakFeet,\r\n NumberOfPeopleRequired,\r\n NumberOfPumpCans,\r\n PumpTrailerCapacityGallons,\r\n MaxPermitsToBurnAtOnce,\r\n NotifyBeforeIgnitionEntity,\r\n NotifyBeforeIgnitionPhone,\r\n MaxRequestTonnage,\r\n } = this.fields\r\n\r\n let schema\r\n switch (conditionName) {\r\n case 'Burning prohibited from':\r\n schema = Yup.string()\r\n .required('Prohibited from description is required')\r\n .max(ProhibitedFrom.opts.max, 'Prohibited from description must be ${max} characters or less')\r\n break\r\n case 'Burning prohibited through':\r\n schema = Yup.string()\r\n .required('Prohibited through description is required')\r\n .max(ProhibitedThrough.opts.max, 'Prohibited through description must be ${max} characters or less')\r\n break\r\n case 'Wind speed':\r\n schema = numberSchema(conditionName)\r\n .max(MaxWindSpeedMph.opts.max, 'Max wind speed must be less than ${max}')\r\n break\r\n case 'Relative humidity':\r\n schema = numberSchema(conditionName)\r\n .min(MinRelHumidityPercent.opts.min, 'Minimum humidity must be greater than or equal to ${min}')\r\n .max(MinRelHumidityPercent.opts.max, 'Minimum humidity must be less than ${max}')\r\n break\r\n case 'No ignition before':\r\n schema = Yup.string()\r\n .required('Ignition start time value is required')\r\n .max(NoIgnitionFuelStart.opts.max, 'No ignition start time value must be ${max} or less')\r\n break\r\n case 'No ignition after':\r\n schema = Yup.string()\r\n .required('Ignition end time value is required')\r\n .max(NoIgnitionFuelEnd.opts.max, 'No ignition end time value must be ${max} or less')\r\n break\r\n case 'Extinguish days':\r\n schema = numberSchema(conditionName)\r\n .min(DaysToExtinguish.opts.min, 'Days to extinguish must be greater than or equal to ${min}')\r\n .max(DaysToExtinguish.opts.max, 'Days to extinguish must be less than ${max}')\r\n break\r\n case 'Max piles':\r\n schema = numberSchema(conditionName)\r\n .min(MaxPilesBurnedAtOnce.opts.min, 'Maximum burn piles must be greater than or equal to ${min}')\r\n .max(MaxPilesBurnedAtOnce.opts.max, 'Maximum burn piles must be less than ${max}')\r\n break\r\n case 'Pile diameter':\r\n schema = numberSchema(conditionName)\r\n .min(MaxDiameterInches.opts.min, 'Pile diameter must be greater than or equal to ${min}')\r\n .max(MaxDiameterInches.opts.max, 'Pile diameter must be less than ${max}')\r\n break\r\n case 'Fire break width':\r\n schema = numberSchema(conditionName)\r\n .min(MinWidthFireBreakFeet.opts.min, 'Fire break width must be greater than or equal to ${min}')\r\n break\r\n case 'Number of people':\r\n schema = numberSchema(conditionName)\r\n .min(NumberOfPeopleRequired.opts.min, 'Number of people must be greater than or equal to ${min}')\r\n break\r\n case 'Pump cans':\r\n schema = numberSchema('Number of pump cans')\r\n .min(NumberOfPumpCans.opts.min, 'Number of pump cans must be greater than or equal to ${min}')\r\n break\r\n case 'Pump truck/trailer':\r\n schema = numberSchema(conditionName + ' capactity in gallons')\r\n .min(PumpTrailerCapacityGallons.opts.min, 'Truck capacacity must be greater than or equal to ${min}')\r\n break\r\n case 'Multiple permits':\r\n schema = numberSchema('Number of permits')\r\n .min(MaxPermitsToBurnAtOnce.opts.min, 'Maximum number of permits must be greater than or equal to ${min}')\r\n break\r\n case 'NotifyBeforeIgnitionEntity':\r\n schema = numberSchema(conditionName)\r\n .max(NotifyBeforeIgnitionEntity.opts.max, 'Notification entity must be ${max} characters or less')\r\n break\r\n case 'NotifyBeforeIgnitionPhone':\r\n schema = numberSchema(conditionName)\r\n .max(NotifyBeforeIgnitionPhone.opts.max, 'Notification phone must be ${max} characters or less')\r\n break\r\n case 'Other conditions':\r\n schema = Yup.object()\r\n .required('Other condition text is required')\r\n break\r\n case 'Smoke management approval limit':\r\n schema = numberSchema('Maximum tons to burn without approval')\r\n .min(MaxRequestTonnage.opts.min, 'Maximum tons to burn without approval must be greater than or equal to${min}')\r\n break\r\n default:\r\n break\r\n }\r\n return schema\r\n }\r\n\r\n static getUnit (conditionName) {\r\n\r\n let unit\r\n switch (conditionName) {\r\n case 'Wind speed':\r\n unit = 'MPH'\r\n break\r\n case 'Relative humidity':\r\n unit = 'percent'\r\n break\r\n case 'No ignition before':\r\n unit = 'a.m.'\r\n break\r\n case 'No ignition after':\r\n unit = 'p.m.'\r\n break\r\n default:\r\n break\r\n }\r\n return unit\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'BurnPermitConditionXrefId',\r\n }\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // ID field\r\n BurnPermitConditionXrefId: attr(),\r\n\r\n // Common fields\r\n CreateBy : attr(),\r\n CreateDate : attr(),\r\n UpdateBy : attr(),\r\n UpdateDate : attr(),\r\n\r\n // Foriegn Keys\r\n BurnPermitId: fk({ \r\n to : 'BurnPermit', \r\n as : 'BurnPermit', \r\n relatedName : 'BurnPermitConditionXrefs', \r\n }),\r\n BurnPermitConditionId: fk({ \r\n to : 'BurnPermitCondition', \r\n as : 'BurnPermitCondition', \r\n relatedName : 'BurnPermitConditionXrefs', \r\n }),\r\n\r\n // Many relationships\r\n BurnPermitEquipmentConditions: many({\r\n to : 'EquipmentType',\r\n through : 'BurnPermitEquipmentConditionXref',\r\n relatedName : 'BurnPermitConditionXrefs',\r\n }),\r\n\r\n BurnPermitProhibitedDayConditions: many({\r\n to : 'DaysOfWeek',\r\n through : 'BurnPermitProhibitedDayConditionXref',\r\n relatedName : 'BurnPermitConditionXrefs',\r\n }),\r\n\r\n BurnPermitWindDirectionConditions: many({\r\n to : 'Direction',\r\n through : 'BurnPermitWindDirectionConditionXref',\r\n relatedName : 'BurnPermitConditionXrefs',\r\n }),\r\n\r\n // Model-specific fields\r\n ProhibitedFrom : attr({ max: 64, }),\r\n ProhibitedThrough : attr({ max: 64, }),\r\n MaxWindSpeedMph : attr({ min: 1, max: 99999999.99, }),\r\n MinRelHumidityPercent : attr({ min: 1, max: 100.00, }),\r\n NoIgnitionFuelStart : attr({ max: 32, }),\r\n NoIgnitionFuelEnd : attr({ max: 32, }),\r\n DaysToExtinguish : attr({ min: 1, max: 366, }),\r\n MaxPilesBurnedAtOnce : attr({ min: 1, max: 99999999, }),\r\n MaxDiameterInches : attr({ min: 1, max: 999, }),\r\n MinWidthFireBreakFeet : attr({ min: 1, }),\r\n NumberOfPeopleRequired : attr({ min: 1, }),\r\n NumberOfPumpCans : attr({ min: 1, }),\r\n PumpTrailerCapacityGallons : attr({ min: 1, }),\r\n MaxPermitsToBurnAtOnce : attr({ min: 1, }),\r\n NotifyBeforeIgnitionEntity : attr({ max: 256, }),\r\n NotifyBeforeIgnitionPhone : attr({ max: 10, }),\r\n OtherCondition : attr({ max: 1000, }),\r\n MaxRequestTonnage : attr({ min: 1, }),\r\n }\r\n }\r\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitDocument extends Model {\n static get modelName () {\n return 'BurnPermitDocument'\n }\n\n static endpoint () {\n return 'BurnPermitDocuments'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitDocumentId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnPermitDocumentId : attr(),\n BurnPermitId : fk({ to: 'BurnPermit', relatedName: 'BurnPermitDocument', as: 'BurnPermit', }),\n DocumentName : attr(),\n BurnPermitDocumentTypeId : fk({ to: 'BurnPermitDocumentType', relatedName: 'BurnPermit', as: 'BurnPermitDocumentType', }),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnPermitDocumentType extends Model {\n static get modelName () {\n return 'BurnPermitDocumentType'\n }\n\n toString () {\n return `${this.BurnPermitDocumentTypeName}`\n }\n\n static endpoint () {\n return 'BurnPermitDocumentTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitDocumentTypeId',\n }\n }\n\n static get fields () {\n return {\n BurnPermitDocumentTypeId : attr(),\n BurnPermitDocumentTypeName : attr(),\n BurnPermitDocumentTypeDescription : attr(),\n BurnPermitDocumentTypeCategoryName : attr(),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n InternalUseOnly : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitEquipmentConditionXref extends Model {\n static get modelName () {\n return 'BurnPermitEquipmentConditionXref'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitEquipmentConditionXrefId',\n }\n }\n\n static get fields () {\n return {\n BurnPermitEquipmentConditionXrefId : attr(),\n BurnPermitConditionXrefId : fk({ \n to : 'BurnPermitConditionXref', \n as : 'BurnPermitConditionXref', \n relatedName : 'BurnPermitEquipmentConditionXrefs',\n }),\n EquipmentTypeId: fk({\n to : 'EquipmentType',\n as : 'EquipmentType',\n relatedName : 'BurnPermitEquipmentConditionXrefs',\n }),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n OtherDescription : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\nimport * as Yup from 'yup'\n\nexport default class BurnPermitReferenceDirectionXref extends Model {\n static get modelName () {\n return 'BurnPermitReferenceDirectionXref'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitReferenceDirectionXrefId',\n }\n }\n\n static get validationSchema () {\n return Yup.object().shape({\n ShowDistanceDirection : Yup.bool(),\n DistanceId : Yup.number()\n .when([ 'ShowDistanceDirection', 'ValidateDistance', ], {\n is : (show, val) => show && val,\n then : Yup.number()\n .min(1, 'You must select a Distance')\n .required('You must select a Distance'),\n }),\n DirectionId: Yup.number()\n .when('ShowDistanceDirection', {\n is : true,\n then : Yup.number()\n .min(1, 'You must select a Direction')\n .required('You must select a Direction'),\n }),\n })\n }\n\n static get fields () {\n return {\n BurnPermitReferenceDirectionXrefId : attr(),\n ReferenceDirectionId : fk({ \n to : 'ReferenceDirection', \n as : 'ReferenceDirection', \n relatedName : 'BurnPermitReferenceDirectionXref',\n }),\n BurnPermitSiteId: fk({\n to : 'BurnPermitSite',\n as : 'BurnPermitSite',\n relatedName : 'BurnPermitReferenceDirectionXref',\n }),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitProhibitedDayConditionXref extends Model {\n static get modelName () {\n return 'BurnPermitProhibitedDayConditionXref'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitProhibitedDayConditionXrefId',\n }\n }\n\n static get fields () {\n return {\n BurnPermitProhibitedDayConditionXrefId : attr(),\n BurnPermitConditionXrefId : fk({ \n to : 'BurnPermitConditionXref', \n as : 'BurnPermitConditionXref', \n relatedName : 'BurnPermitProhibitedDayConditionXrefs',\n }),\n DayOfWeekId: fk({\n to : 'DaysOfWeek',\n as : 'DayOfWeek',\n relatedName : 'BurnPermitProhibitedDayConditionXrefs',\n }),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitWindDirectionConditionXref extends Model {\n static get modelName () {\n return 'BurnPermitWindDirectionConditionXref'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitWindDirectionConditionXrefId',\n }\n }\n\n static get fields () {\n return {\n BurnPermitWindDirectionConditionXrefId : attr(),\n BurnPermitConditionXrefId : fk({ \n to : 'BurnPermitConditionXref', \n as : 'BurnPermitConditionXref', \n relatedName : 'BurnPermitWindDirectionConditionXrefs',\n }),\n DirectionId: fk({\n to : 'Direction',\n as : 'Direction',\n relatedName : 'BurnPermitWindDirectionConditionXrefs',\n }),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, fk, many, } from 'redux-orm'\r\nimport * as Yup from 'yup'\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nfunction requiredNumberSchema (message, min) {\r\n if (typeof min !== 'number') {[\r\n min = 1,\r\n ]}\r\n return Yup.number().min(min, message).required(message)\r\n}\r\n\r\nexport default class BurnPermitFuel extends Model {\r\n static get modelName () {\r\n return 'BurnPermitFuel'\r\n }\r\n\r\n toString () {\r\n return `Burn Permit Fuel ${this.BurnPermitFuelId}`\r\n }\r\n\r\n static endpoint () {\r\n return `${REACT_APP_SERVER_URL}BurnPermitFuels`\r\n }\r\n\r\n static validationSchema () {\r\n\r\n const valSchema = {\r\n BurnIgnitionTypes: Yup.array()\r\n .min(1, 'You must choose one or more Ignition Type'),\r\n DuffTypeId: Yup.number()\r\n .when('ShowFuelsCalculator', {\r\n is : true,\r\n then : requiredNumberSchema('You must choose a Duff Type.'),\r\n otherwise : Yup.number().nullable(),\r\n }),\r\n DuffDepth: Yup.number()\r\n .when('ShowFuelsCalculator', {\r\n is : true,\r\n then : requiredNumberSchema('Duff Depth must be a number greater than or equal to 0 (zero).', 0),\r\n otherwise : Yup.number().nullable(),\r\n }),\r\n LitterDepth: Yup.number()\r\n .when('ShowFuelsCalculator', {\r\n is : true,\r\n then : requiredNumberSchema('Litter Depth must be a number greater than or equal to 0 (zero).', 0),\r\n otherwise : Yup.number().nullable(),\r\n }),\r\n Shrubs: Yup.number()\r\n .when('ShowFuelsCalculator', {\r\n is : true,\r\n then : requiredNumberSchema('Shrubs must be a number greater than or equal to 0 (zero).', 0),\r\n otherwise : Yup.number().nullable(),\r\n }),\r\n GrassHerb: Yup.number()\r\n .when('ShowFuelsCalculator', {\r\n is : true,\r\n then : requiredNumberSchema('Grass/Herb must be a number greater than or equal to 0 (zero).', 0),\r\n otherwise : Yup.number().nullable(),\r\n }),\r\n BurnPermitFuelLoadingXref: Yup.array()\r\n .when('ShowFuelsCalculator', {\r\n is : true,\r\n then : Yup.array()\r\n .of(\r\n Yup.object().shape({\r\n TonsPerAcre : requiredNumberSchema('You must enter a value greater than 0 (zero).', 0.1),\r\n BurnPermitFuelId : Yup.number().required(),\r\n FuelDiameterId : Yup.number().required(),\r\n })\r\n )\r\n .min(1, 'You must enter one or more Fuel Loading value greather than 0 (zero).')\r\n .required('You must enter one or more Fuel Loading value greather than 0 (zero).'),\r\n otherwise: Yup.array().nullable(),\r\n }),\r\n }\r\n\r\n return Yup.object().shape(valSchema)\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'BurnPermitFuelId',\r\n }\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Common Properties\r\n BurnPermitFuelId : attr(),\r\n OtherBurnIgnitionTypeDescription : attr(),\r\n LitterDepth : attr(),\r\n DuffDepth : attr(),\r\n Shrubs : attr(),\r\n GrassHerb : attr(),\r\n ConsumedTonnage : attr(),\r\n TotalTonsPerAcre : attr(),\r\n CreateBy : attr(),\r\n CreateDate : attr(),\r\n UpdateBy : attr(),\r\n UpdateDate : attr(),\r\n\r\n // Relationships\r\n DuffTypeId : fk({ to: 'DuffType', relatedName: 'BurnPermitFuels', as: 'DuffType', }),\r\n BurnIgnitionTypes : many({ to: 'BurnIgnitionType', relatedName: 'BurnPermitFuels', }),\r\n BurnPermitFuelLoadingXref : many({ to: 'FuelDiameter', relatedName: 'BurnPermitFuels', through: 'BurnPermitFuelLoadingXref', }),\r\n }\r\n }\r\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitFuelLoadingXref extends Model {\n static get modelName () {\n return 'BurnPermitFuelLoadingXref'\n }\n\n toString () {\n return `${this.BurnPermitFuelLoadingXrefName}`\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitFuelLoadingXrefId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnPermitFuelLoadingXrefId : attr(),\n TotalTonsPerAcre : attr(),\n BurnPermitFuelId : fk({ to: 'BurnPermitFuel', relatedName: 'BurnPermitFuelLoadingXrefs', as: 'BurnPermitFuel', }),\n FuelDiameterId : fk({ to: 'FuelDiameter', relatedName: 'BurnPermitFuelLoadingXrefs', as: 'FuelDiameter', }),\n \n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, fk, Model, } from 'redux-orm'\r\nimport * as Yup from 'yup'\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nexport default class BurnPermitLocation extends Model {\r\n static get modelName () {\r\n return 'BurnPermitLocation'\r\n }\r\n\r\n toString () {\r\n return `${this.BurnPermitLocationId}`\r\n }\r\n\r\n static endpoint () {\r\n return `${REACT_APP_SERVER_URL}BurnPermitLocations`\r\n }\r\n\r\n static getValidationSchema (schemaType) {\r\n\r\n const { latLong = false, plss = false, } = schemaType || {}\r\n\r\n let shapeObj = {}\r\n\r\n if (latLong === true) {\r\n\r\n const {\r\n Latitude,\r\n Longitude,\r\n } = this.fields\r\n\r\n shapeObj = {\r\n Latitude: Yup.number()\r\n .when([ 'Longitude', 'Force', ] , {\r\n is: (Long, Force) => {\r\n return !!Long || Force\r\n },\r\n then: Yup.number().required(`Latitude must be between ${Latitude.opts.min} and ${Latitude.opts.max}.`),\r\n })\r\n .typeError('Latitude must be a number')\r\n .min(Latitude.opts.min, `Latitude must be between ${Latitude.opts.min} and ${Latitude.opts.max}.`)\r\n .max(Latitude.opts.max, `Latitude must be between ${Latitude.opts.min} and ${Latitude.opts.max}.`),\r\n Longitude: Yup.number()\r\n .when([ 'Latitude', 'Force', ], {\r\n is: (Lat, Force) => {\r\n return !!Lat || Force\r\n },\r\n then: Yup.number().required(`Longitude must be between ${Longitude.opts.min} and ${Longitude.opts.max}.`),\r\n })\r\n .typeError('Longitude must be a number')\r\n .min(Longitude.opts.min, `Longitude must be between ${Longitude.opts.min} and ${Longitude.opts.max}.`)\r\n .max(Longitude.opts.max, `Longitude must be between ${Longitude.opts.min} and ${Longitude.opts.max}.`),\r\n }\r\n }\r\n else if (plss === true) {\r\n\r\n const {\r\n LegalDescriptionSection,\r\n LegalDescriptionTownship,\r\n LegalDescriptionRange,\r\n } = this.fields\r\n\r\n shapeObj = {\r\n LegalDescriptionQuarter1: Yup.string()\r\n .ensure()\r\n .required('Please select a Quarter'),\r\n LegalDescriptionQuarter2: Yup.string()\r\n .ensure()\r\n .required('Please select a Quarter'),\r\n LegalDescriptionSection: Yup.number()\r\n .min(LegalDescriptionSection.opts.min, `Section must be between ${LegalDescriptionSection.opts.min} and ${LegalDescriptionSection.opts.max}.`)\r\n .max(LegalDescriptionSection.opts.max, `Section must be between ${LegalDescriptionSection.opts.min} and ${LegalDescriptionSection.opts.max}.`)\r\n .required('Please enter a Section'),\r\n LegalDescriptionTownship: Yup.number()\r\n .min(LegalDescriptionTownship.opts.min, `Township must be between ${LegalDescriptionTownship.opts.min} and ${LegalDescriptionTownship.opts.max}.`)\r\n .max(LegalDescriptionTownship.opts.max, `Township must be between ${LegalDescriptionTownship.opts.min} and ${LegalDescriptionTownship.opts.max}.`)\r\n .required('Please enter a Township'),\r\n LegalDescriptionRange: Yup.number()\r\n .min(LegalDescriptionRange.opts.min, `Range must be between ${LegalDescriptionRange.opts.min} and ${LegalDescriptionRange.opts.max}.`)\r\n .max(LegalDescriptionRange.opts.max, `Range must be between ${LegalDescriptionRange.opts.min} and ${LegalDescriptionRange.opts.max}.`)\r\n .required('Please enter a Range'),\r\n LegalDescriptionDirectionId: Yup.string()\r\n .ensure()\r\n .required('Please select a Direction'),\r\n }\r\n\r\n }\r\n else {\r\n \r\n const {\r\n SlopePercent,\r\n ElevationFeet,\r\n } = this.fields\r\n\r\n shapeObj = {\r\n RegionId: Yup.string()\r\n .ensure()\r\n .required('Please choose the Region you intend to burn in.'),\r\n CountyId: Yup.string()\r\n .ensure()\r\n .required('Please choose the County you intend to burn in.'),\r\n FireDistrictDepartmentId: Yup.string()\r\n .ensure()\r\n .required('Please choose the Fire District you intend to burn in.'),\r\n DrivingDirections: Yup.string()\r\n .ensure()\r\n .required('Please enter driving directions'),\r\n SlopePercent: Yup.number()\r\n .typeError('Slope percent must be a number')\r\n .min(SlopePercent.opts.min, `Slope percent must be between ${SlopePercent.opts.min} and ${SlopePercent.opts.max}`)\r\n .max(SlopePercent.opts.max, `Slope percent must be between ${SlopePercent.opts.min} and ${SlopePercent.opts.max}`)\r\n .required('Please enter a slope percent'),\r\n ElevationFeet: Yup.number()\r\n .typeError('Elevation must be a number')\r\n .min(ElevationFeet.opts.min, `Elevation must be between ${ElevationFeet.opts.min} and ${ElevationFeet.opts.max} feet`)\r\n .max(ElevationFeet.opts.max, `Elevation must be between ${ElevationFeet.opts.min} and ${ElevationFeet.opts.max} feet`)\r\n .required('Please enter an elevation'),\r\n }\r\n }\r\n\r\n return Yup.object().shape(shapeObj, [ 'Latitude', 'Longitude', ])\r\n }\r\n}\r\n\r\nBurnPermitLocation.options = {\r\n idAttribute: 'BurnPermitLocationId',\r\n}\r\n\r\nBurnPermitLocation.fields = {\r\n // Common Properties\r\n BurnPermitLocationId : attr(),\r\n CreateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateDate : attr(),\r\n UpdateBy : attr(),\r\n // Model-Specific Properties\r\n Latitude : attr({ min: 45.5500, max: 49.0000, }),\r\n Longitude : attr({ min: -124.7667, max: -116.9167, }),\r\n DrivingDirections : attr(),\r\n LegalDescriptionQuarter1 : attr(),\r\n LegalDescriptionQuarter2 : attr(),\r\n LegalDescriptionSection : attr({ min: 1, max: 96, }),\r\n LegalDescriptionTownship : attr({ min: 1, max: 41, }),\r\n LegalDescriptionRange : attr({ min: 1, max: 47, }),\r\n LegalDescriptionDirectionLocation : attr(),\r\n ElevationFeet : attr({ min: 0, max: 14411, }),\r\n SlopePercent : attr({ min: 0, max: 1000, }),\r\n IsUGA : attr(),\r\n // Relationships\r\n AddressId : fk({ to: 'Address', relatedName: 'BurnPermitLocations', as: 'Address', }),\r\n AddressLocation : attr(),\r\n CountyId : fk({ to: 'County', relatedName: 'BurnPermitLocations', as: 'County', }),\r\n RegionId : fk({ to: 'Region', relatedName: 'BurnPermitLocations', as: 'Region', }),\r\n FireDistrictDepartmentId : fk({ to: 'FireDistrictDepartment', relatedName: 'BurnPermitLocations', as: 'FireDistrictDepartment', }),\r\n LegalDescriptionDirectionId : fk({ to: 'Direction', relatedName: 'BurnPermitLocations', as: 'LegalDescriptionDirection', }),\r\n}","import { attr, Model, many, } from 'redux-orm'\r\nimport { dateFormatter, currencyFormatter, } from '../utilities'\r\nimport * as Yup from 'yup'\r\n\r\n\r\nexport default class BurnPermitOrder extends Model {\r\n static get modelName () {\r\n return 'BurnPermitOrder'\r\n }\r\n\r\n toString () {\r\n return `${this.BurnPermitOrderInfoName}`\r\n }\r\n\r\n static endpoint () {\r\n return 'BurnPermitOrders'\r\n }\r\n\r\n static getDataTablesColumns () {\r\n return [\r\n {\r\n title : 'ID',\r\n data : 'BurnPermitOrderId',\r\n width : 25,\r\n },\r\n {\r\n title : 'Amount',\r\n data : 'BurnPermitOrderAmount',\r\n defaultContent : '',\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data\r\n }\r\n return currencyFormatter.format(data)\r\n },\r\n width: 75,\r\n },\r\n {\r\n title : 'Payment Status',\r\n data : null,\r\n defaultContent : '',\r\n render : (data, drawType) => {\r\n // Either a payment has not yet been made, or a payment was unsuccessful - show the EPay Result Message\r\n if (drawType === 'display' && data.AllowPayment && !data.ApplicationDetail) {\r\n return data.EPayResultMessage\r\n }\r\n // A successful payment was processed, and an application detail record has not yet been recorded\r\n else if ((!data.ApplicationDetail || !data.ApplicationDetail.PaymentCommandCode) && !data.AllowPayment && data.PaymentHash) {\r\n return 'Paid'\r\n }\r\n // A successful payment was processed, but there was a return on the application detail\r\n // There is an Application Detail record for a successful payment\r\n else if (data.ApplicationDetail && data.ApplicationDetail.PaymentCommandCode) {\r\n return data.ApplicationDetail.PaymentCommandCode\r\n }\r\n return 'Pending'\r\n },\r\n width: 100,\r\n },\r\n {\r\n title : 'Payment Method',\r\n data : null,\r\n width : 150,\r\n defaultContent : '',\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data.CardType\r\n }\r\n if ((!data.CardType || data.CardType.length === 0) && data.EPayReturnCode && !data.AllowPayment) {\r\n return 'E-Check' \r\n }\r\n else if(data.ApplicationDetail && data.ApplicationDetail.PaymentMethod) {\r\n return data.ApplicationDetail.PaymentMethod\r\n }\r\n return data.CardType\r\n },\r\n },\r\n {\r\n title : 'Order Created',\r\n data : 'CreateDate',\r\n type : 'date',\r\n defaultContent : '',\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data\r\n }\r\n return dateFormatter(data, 'MMM DD, YYYY HH:mm:ss')\r\n },\r\n width: 150,\r\n },\r\n {\r\n title : 'Transaction Date',\r\n data : null,\r\n type : 'date',\r\n defaultContent : '',\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data.SettlementSubmissionDate\r\n }\r\n const ret = data.ApplicationDetail ? data.ApplicationDetail.TransactionDate : data.SettlementSubmissionDate ? data.SettlementSubmissionDate : data.UpdateDate\r\n if (ret) {\r\n return dateFormatter(ret, 'MMM DD, YYYY')\r\n }\r\n return ''\r\n },\r\n width: 150,\r\n },\r\n {\r\n title : 'Permits',\r\n data : 'BurnPermitOrderXref',\r\n defaultContent : '',\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data\r\n }\r\n let html = 'No permits found'\r\n if (Array.isArray(data)) {\r\n html = ''\r\n for (let i = 0, len = data.length; i < len; i++) {\r\n const permitId = data[i].BurnPermitId\r\n \r\n html += `${permitId}`\r\n }\r\n }\r\n return html\r\n },\r\n },\r\n {\r\n title : 'Permit Number',\r\n data : 'BurnPermitNumbers',\r\n defaultContent : '',\r\n },\r\n {\r\n title : 'Region',\r\n data : 'BurnPermitRegions',\r\n defaultContent : '',\r\n },\r\n {\r\n orderable : false,\r\n className : 'btn-order-pay',\r\n targets : 0,\r\n defaultContent : '',\r\n data : null,\r\n name : 'pay',\r\n width : 50,\r\n render : (data, drawType) => {\r\n if (drawType !== 'display') {\r\n return data.BurnPermitOrderId\r\n }\r\n if (!data.AllowPayment) {\r\n return `View`\r\n }\r\n return `Pay`\r\n },\r\n },\r\n ]\r\n }\r\n \r\n static get options () {\r\n return {\r\n idAttribute: 'BurnPermitOrderId',\r\n }\r\n }\r\n\r\n static getValidationSchema (isVoucher = false) {\r\n const valSchema = {\r\n PaymentMethod: Yup.string()\r\n .ensure()\r\n .required(),\r\n FirstName: Yup.string()\r\n .ensure()\r\n .required('You must enter a First Name.')\r\n .max(25, 'First Name must be 25 characters or fewer.'),\r\n LastName: Yup.string()\r\n .ensure()\r\n .required('You must enter a Last Name.')\r\n .max(50, 'Last Name must be 50 characters or fewer.'),\r\n TotalAmountPaid: Yup.number()\r\n .required('You must enter an amount.')\r\n .positive('The amount must be a positive number.')\r\n .min(0.01, 'The amount must be greater than $0.01')\r\n .max(214748.36, 'The amount must be less than $21,478.36'),\r\n }\r\n\r\n if (isVoucher) {\r\n valSchema['VoucherNumber'] = Yup.string()\r\n .ensure()\r\n .required('You must enter a Voucher Number.')\r\n .max(25, 'Voucher Number must be 25 characters or fewer.')\r\n valSchema['VoucherDate'] = Yup.date().when('PaymentMethod', {\r\n is : 'Voucher',\r\n then : Yup.date().required('You must enter the Voucher Date.'),\r\n otherwise : Yup.date().required('You must enter the Payment Date.'),\r\n })\r\n return Yup.object().shape(valSchema)\r\n }\r\n\r\n valSchema['CheckNumber'] = Yup.string().when('PaymentMethod', {\r\n is : 'Check',\r\n then : Yup.string().required('You must enter the Check Number.')\r\n .min(1, 'Check number must have a value.')\r\n .max(255, 'Check number must be less than 255 characters.'),\r\n })\r\n valSchema['CheckDate'] = Yup.date().when('PaymentMethod', {\r\n is : 'Check',\r\n then : Yup.date().required('You must enter the Check Date.'),\r\n otherwise : Yup.date().required('You must enter the Payment Date.'),\r\n })\r\n\r\n return Yup.object().shape(valSchema)\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Common Properties\r\n BurnPermitOrderId : attr(),\r\n CreateDate : attr({ getDefault: () => new Date(), }),\r\n CreateBy : attr(),\r\n UpdateDate : attr({ getDefault: () => new Date(), }),\r\n UpdateBy : attr(),\r\n \r\n // Model-Specific Properties\r\n BurnPermitOrderAmount : attr({ getDefault: () => '', }),\r\n EPayReturnCode : attr(),\r\n EPayResultMessage : attr(),\r\n ConfirmationNumber : attr(),\r\n TotalAmountPaid : attr(),\r\n SettlementSubmissionDate : attr(),\r\n AuthorizationCode : attr(),\r\n CardType : attr(),\r\n PaymentHash : attr(),\r\n PaymentCommandCode : attr(),\r\n AllowPayment : attr(),\r\n // These are pseudo properties that exist in a different \r\n // database table Burn_Permit_Payment_Application_Detail\r\n ApplicationDetail : attr(),\r\n /*\r\n {\r\n CheckNumber,\r\n PaymentAmount,\r\n PaymentCommandCode,\r\n PaymentMethod,\r\n TransactionDate,\r\n FirstName,\r\n LastName,\r\n }\r\n */\r\n // These are pseudo properties that exist in a different \r\n // database table Burn_Permit_Order_Voucher\r\n BurnPermitOrderVoucher : attr(),\r\n /*\r\n {\r\n VoucherNumber,\r\n Comment,\r\n Contact\r\n },\r\n */\r\n BurnPermitOrderXref : many({ to: 'BurnPermit', relatedName: 'BurnPermitOrder', through: 'BurnPermitOrderXref', }),\r\n }\r\n }\r\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitOrderXref extends Model {\n static get modelName () {\n return 'BurnPermitOrderXref'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitOrderXrefId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnPermitOrderXrefId : attr(),\n BurnPermitId : fk({ to: 'BurnPermit', relatedName: 'BurnPermitOrderXrefs', as: 'BurnPermit', }),\n BurnPermitOrderId : fk({ to: 'BurnPermitOrder', relatedName: 'BurnPermitOrderXrefs', as: 'BurnPermitOrder', }),\n \n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\r\nimport * as Yup from 'yup'\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\nconst HAND_PILE_TYPE = 1\r\nconst MACHINE_PILE_TYPE = 2\r\nconst SHAPE_DIMENSION_PROPS = [\r\n [ 'HeightOne', ],\r\n [ 'HeightOne', 'WidthOne', ],\r\n [ 'HeightOne', 'WidthOne', 'LengthOne', ],\r\n [ 'WidthOne', 'LengthOne', 'WidthTwo', ],\r\n [ 'WidthOne', 'LengthOne', 'WidthTwo', ],\r\n [ 'HeightOne', 'WidthOne', 'LengthOne', ],\r\n [ 'HeightOne', 'WidthOne', 'LengthOne', 'HeightTwo', 'WidthTwo', 'LengthTwo', ],\r\n]\r\n\r\nconst positiveVal = 'Please enter a value greater than zero (0).'\r\n\r\nfunction requiredDimension (dimensionPropName) {\r\n return {\r\n is: shape => {\r\n return Number.isInteger(shape) && SHAPE_DIMENSION_PROPS[shape].includes(dimensionPropName)\r\n },\r\n then: Yup.number().typeError('Please enter a number.').positive(positiveVal).required('Please enter a value.'),\r\n }\r\n}\r\n\r\nexport default class BurnPermitPileGroup extends Model {\r\n static get modelName () {\r\n return 'BurnPermitPileGroup'\r\n }\r\n\r\n toString () {\r\n return `${this.PilesConsumedTonnage} ${this.TotalNumberBurnPiles}`\r\n }\r\n\r\n static endpoint () {\r\n return `${REACT_APP_SERVER_URL}BurnPermitPileGroups`\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'BurnPermitPileGroupId',\r\n }\r\n }\r\n\r\n static get ShapeDimensionProps () {\r\n return SHAPE_DIMENSION_PROPS\r\n }\r\n\r\n static dataTableColumns ({ input = false, output = false, }) {\r\n if (input === true) {\r\n return [\r\n {\r\n data : 'BurnPermitPileGroupId',\r\n orderable : false,\r\n },\r\n {\r\n title : 'ID',\r\n data : 'BurnPermitPileGroupId',\r\n },\r\n {\r\n title : 'Name',\r\n data : 'PileGroupName',\r\n },\r\n {\r\n title : '# of Piles',\r\n data : 'PileCount',\r\n },\r\n {\r\n title : 'Type',\r\n data : 'PileTypeName',\r\n },\r\n {\r\n title : 'Shape',\r\n data : 'PileShapeName',\r\n },\r\n {\r\n title : 'Dimensions',\r\n render : function (data, drawType, row) {\r\n if (drawType !== 'display') {\r\n return ''\r\n }\r\n let dimensions = []\r\n if (row.WidthOne) {\r\n dimensions.push(`${row.WidthOne}'W1`)\r\n }\r\n if (row.HeightOne) {\r\n dimensions.push(`${row.HeightOne}'H1`)\r\n }\r\n if (row.LengthOne) {\r\n dimensions.push(`${row.LengthOne}'L1`)\r\n }\r\n if (row.WidthTwo) {\r\n dimensions.push(`${row.WidthTwo}'W2`)\r\n }\r\n if (row.HeightTwo) {\r\n dimensions.push(`${row.HeightTwo}'H2`)\r\n }\r\n if (row.LengthTwo) {\r\n dimensions.push(`${row.LengthTwo}'L2`)\r\n }\r\n return dimensions.join(' x ')\r\n },\r\n },\r\n {\r\n title : 'Quality',\r\n data : 'PileQualityName',\r\n },\r\n {\r\n title : '% Soil',\r\n data : 'PercentSoil',\r\n render : function (data, drawType) {\r\n if (drawType !== 'display') {\r\n return data\r\n }\r\n return data ? `${data}%` : ''\r\n },\r\n },\r\n {\r\n title : 'Packing Ratio',\r\n data : 'PackingRatio',\r\n },\r\n {\r\n title : 'Hand Pile Species',\r\n data : 'HandPileSpeciesName',\r\n },\r\n {\r\n title : 'Species 1',\r\n render : function (data, drawType, row) {\r\n if (drawType !== 'display' || !row.SpeciesOneDensity) {\r\n return ''\r\n }\r\n return `${row.SpeciesOneDensity} - ${row.SpeciesOneCompositionPercent}%`\r\n },\r\n },\r\n {\r\n title : 'Species 2',\r\n render : function (data, drawType, row) {\r\n if (drawType !== 'display' || !row.SpeciesTwoDensity) {\r\n return ''\r\n }\r\n return `${row.SpeciesTwoDensity} - ${row.SpeciesTwoCompositionPercent}%`\r\n },\r\n },\r\n ]\r\n }\r\n else if (output === true) {\r\n const baseProps = {\r\n class : 'text-right',\r\n type : 'num',\r\n }\r\n return [\r\n {\r\n title : 'ID',\r\n data : 'BurnPermitPileGroupId',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'Geometric Volume',\r\n data : 'GeometricVolume',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'True Wood Volume',\r\n data : 'TrueWoodVolume',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'Pile Biomass',\r\n data : 'PileBiomass',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'Consumed Fuel',\r\n data : 'ConsumedFuel',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'PM',\r\n data : 'Pm',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'PM 2.5',\r\n data : 'Pm25',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'PM 10',\r\n data : 'Pm10',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'CO',\r\n data : 'Co',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'CO2',\r\n data : 'Co2',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'CH4',\r\n data : 'Ch4',\r\n },\r\n {\r\n ...baseProps,\r\n title : 'NMHC',\r\n data : 'Nmhc',\r\n },\r\n ]\r\n }\r\n }\r\n\r\n static get validationSchema () {\r\n return Yup.object().shape({\r\n PileCount : Yup.number().nullable().positive(positiveVal).required('Please enter the # of Piles in this group'),\r\n PileShape : Yup.number().nullable().required('Please choose the shape of the Pile.'),\r\n PileType : Yup.number().nullable().required('Please choose the type of Pile construction'),\r\n HeightOne : Yup.number().typeError('Please enter a number.').nullable().when('PileShape', requiredDimension('HeightOne')),\r\n WidthOne : Yup.number().typeError('Please enter a number.').nullable().when('PileShape', requiredDimension('WidthOne')),\r\n LengthOne : Yup.number().typeError('Please enter a number.').nullable().when('PileShape', requiredDimension('LengthOne')),\r\n HeightTwo : Yup.number().typeError('Please enter a number.').nullable().when('PileShape', requiredDimension('HeightTwo')),\r\n WidthTwo : Yup.number().typeError('Please enter a number.').nullable().when('PileShape', requiredDimension('WidthTwo')),\r\n LengthTwo : Yup.number().typeError('Please enter a number.').nullable().when('PileShape', requiredDimension('LengthTwo')),\r\n HandPileSpecies : Yup.number().nullable()\r\n .when('PileType', {\r\n is : t => t === HAND_PILE_TYPE,\r\n then : Yup.number().nullable().required('Please choose the species for these piles'),\r\n }),\r\n PercentSoil: Yup.number().nullable()\r\n .when('PileType', {\r\n is : t => t === MACHINE_PILE_TYPE,\r\n then : Yup.number().nullable().positive(positiveVal).required('Please enter the % as a whole number of the pile that is soil'),\r\n }),\r\n PackingRatio: Yup.number().nullable()\r\n .when('PileType', {\r\n is : t => t === MACHINE_PILE_TYPE,\r\n then : Yup.number().nullable().positive(positiveVal).required('Please enter the Packing Ratio as a whole number of the pile that is soil'),\r\n }),\r\n PileQuality: Yup.number().nullable()\r\n .when('PileType', {\r\n is : t => t === MACHINE_PILE_TYPE,\r\n then : Yup.number().nullable().required('Please choose the quality of the soil'),\r\n }),\r\n SpeciesOneDensityId: Yup.number().nullable()\r\n .when('PileType', {\r\n is : t => t === MACHINE_PILE_TYPE,\r\n then : Yup.number().nullable().required('Please choose a Species'),\r\n }),\r\n SpeciesOneCompositionPercent: Yup.number()\r\n .when('PileType', {\r\n is : t => t === MACHINE_PILE_TYPE,\r\n then : Yup.number()\r\n .max(100, 'Composition % must be 100 or less')\r\n .integer('Please enter the % as a whole number')\r\n .positive(positiveVal)\r\n .required('Please enter the % as a whole number of the species that composes these piles'),\r\n otherwise: Yup.number().nullable(),\r\n }),\r\n SpeciesTwoDensityId: Yup.number()\r\n .when([ 'PileType', 'SpeciesOneCompositionPercent', ], {\r\n is : (pt, c1) => pt === MACHINE_PILE_TYPE && !isNaN(c1) && c1 < 100,\r\n then : Yup.number().typeError('Please choose a second Species').positive(positiveVal).required('Please choose a second Species'),\r\n otherwise : Yup.number().nullable(),\r\n }),\r\n SpeciesTwoCompositionPercent: Yup.number()\r\n .when([ 'PileType', 'SpeciesOneCompositionPercent', ], (pt, c1, schema) => {\r\n if (pt === MACHINE_PILE_TYPE){\r\n if (!isNaN(c1) && c1 === 100) {\r\n return schema.nullable()\r\n .min(0, 'Total composition must be 100%')\r\n .max(0, 'Total composition cannot exceed 100%')\r\n }\r\n return schema.integer('Please enter the % as a whole number')\r\n .max(100, 'Composition % must be 100 or less')\r\n .typeError('Composition must be a number')\r\n .positive(positiveVal)\r\n .required('Please enter the % as a whole number of the species that composes these piles')\r\n }\r\n return schema.nullable()\r\n }),\r\n })\r\n }\r\n\r\n static get fields () {\r\n return {\r\n BurnPermitPileGroupId : attr(),\r\n BurnPermitId : fk({ to: 'BurnPermit', relatedName: 'BurnPermitPileGroups', as: 'BurnPermit', }),\r\n\r\n // Pile Group / Esimated Consumed Tonnage Calculator input fields\r\n PileCount : attr(),\r\n PileType : attr(),\r\n PileShape : attr(),\r\n PileGroupName : attr(),\r\n WidthOne : attr(),\r\n HeightOne : attr(),\r\n LengthOne : attr(),\r\n WidthTwo : attr(),\r\n HeightTwo : attr(),\r\n LengthTwo : attr(),\r\n PileQuality : attr(),\r\n PercentSoil : attr(),\r\n PackingRatio : attr(),\r\n HandPileSpecies : attr(),\r\n SpeciesOneDensityId : fk({ to: 'SpeciesWoodDensity', relatedName: 'BurnPermitPileGroupSpeciesOneDensity', as: 'SpeciesOneDensity', }),\r\n SpeciesOneCompositionPercent : attr(),\r\n SpeciesTwoDensityId : fk({ to: 'SpeciesWoodDensity', relatedName: 'BurnPermitPileGroupSpeciesTwoDensity', as: 'SpeciesTwoDensity', }),\r\n SpeciesTwoCompositionPercent : attr(),\r\n \r\n // Estimated Consumed Tonnage Calculator result fields\r\n GeometricVolume : attr(),\r\n TrueWoodVolume : attr(),\r\n PileBiomass : attr(),\r\n ConsumedFuel : attr(),\r\n Pm : attr(),\r\n Pm25 : attr(),\r\n Pm10 : attr(),\r\n Co : attr(),\r\n Co2 : attr(),\r\n Ch4 : attr(),\r\n Nmhc : attr(),\r\n LegacyTonnage : attr(),\r\n\r\n // Audit Fields\r\n CreateDate : attr(),\r\n UpdateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateBy : attr(),\r\n }\r\n }\r\n}","import { Model, attr, } from 'redux-orm'\nimport { renderDate, formatLegalDesc, renderTons, renderAcres, renderCheckOrXIcon, renderLatLong, } from '../utilities/columnHelpers'\nimport { dateFormatter, objectToQueryParams, objHasProp, } from '../utilities'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class BurnPermitSearch extends Model {\n\n static get modelName () {\n return 'BurnPermitSearch'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitId',\n }\n }\n\n static endpoint (params) {\n let endpoint = `${REACT_APP_SERVER_URL}BurnPermits/Search`\n if (params && typeof params === 'object') {\n endpoint += `?${objectToQueryParams(params)}`\n }\n return endpoint\n }\n\n static getDataTablesColumns (props) {\n \n let showLandownerAgent = false, enableCart = false\n \n if (props && objHasProp(props, 'showLandownerAgent')) {\n showLandownerAgent = props.showLandownerAgent\n }\n\n if (props && objHasProp(props, 'enableCart')) {\n enableCart = props.enableCart\n }\n \n const cols = [\n {\n title : 'Order',\n data : 'BurnPermitId',\n orderable : false,\n width : 15,\n visible : enableCart,\n },\n {\n title : 'Application Id',\n data : 'BurnPermitId',\n className : 'text-right pr-4',\n type : 'num',\n render : (data, drawType) => {\n if (drawType !== 'display') {\n return data\n }\n return `${data}`\n },\n },\n {\n title : 'Permit Number',\n data : 'BurnPermitNumber',\n defaultContent : '',\n className : 'text-right pr-4',\n },\n {\n title : 'Unit Name',\n data : 'BurnUnitName',\n defaultContent : '',\n width : '100px',\n },\n {\n title : 'Burn Type(s)',\n data : 'BurnType',\n defaultContent : '',\n },\n {\n title : 'Status',\n data : 'BurnPermitApplicationStatus',\n defaultContent : '',\n width : '75px',\n render : (data, drawType, row) => {\n if (drawType === 'sort') {\n if (row.BurnPermitStatus) {\n return `${row.BurnPermitStatus}
${dateFormatter(row.BurnPermitStatusDate, 'MMM DD, YYYY')}`\n }\n return `${data}
${dateFormatter(row.BurnPermitApplicationStatusDate, 'MMM DD, YYYY')}`\n }\n if (drawType !== 'display') {\n return row.BurnPermitStatus || row.BurnPermitApplicationStatus\n }\n else if (!data) {\n return data\n }\n if (row.PermitIsSuspended) {\n return 'Suspended'\n }\n else if (row.BurnPermitStatus) {\n return `${row.BurnPermitStatus}
${dateFormatter(row.BurnPermitStatusDate, 'MMM DD, YYYY')}`\n }\n return `${data}
${dateFormatter(row.BurnPermitApplicationStatusDate, 'MMM DD, YYYY')}`\n },\n },\n {\n title : 'Expiration Date',\n data : 'BurnPermitExpirationDate',\n className : 'text-right pr-4',\n render : renderDate,\n defaultContent : '',\n width : '75px',\n },\n {\n title : 'In UGA',\n data : 'IsUGA',\n render : renderCheckOrXIcon,\n },\n {\n title : 'Forest Health Exempt',\n data : 'IsForestHealthExempt',\n defaultContent : '',\n render : (data, drawType) => {\n if (drawType === 'sort') {\n return data === null ? 0 : data === true ? 1 : -1\n }\n if (drawType !== 'display') {\n return data\n }\n if (data === null) {\n return data\n }\n return renderCheckOrXIcon(data, drawType)\n },\n },\n {\n title : 'County',\n data : 'County',\n defaultContent : '',\n },\n {\n title : 'Legal Description',\n defaultContent : '',\n render : (data, drawType, row) => {\n if (drawType !== 'display') {\n return row.LegalDescSection\n }\n return formatLegalDesc(row)\n },\n },\n {\n title : 'Burn Address',\n width : '200px',\n defaultContent : '',\n render : (data, drawType, row) => {\n if (drawType !== 'display') {\n return row.Address1\n }\n\n let address = row.Address1\n if (row.Address2) {\n address += '
' + row.Address2\n }\n if (row.Address3) {\n address += '
' + row.Address3\n }\n if (row.AddressCity) {\n address += '
' + row.AddressCity\n }\n if (row.AddressState) {\n address += ', ' + row.AddressState\n }\n if (row.AddressZip) {\n address += ' ' + row.AddressZip\n }\n\n return address\n },\n },\n {\n title : 'Est. Permit Tonnage',\n data : 'TotalPermitTonnage',\n className : 'text-right pr-4',\n defaultContent : '',\n render : renderTons,\n },\n {\n title : 'Total Requested Tons',\n data : 'TotalRequestedTons',\n className : 'text-right pr-4',\n defaultContent : '',\n render : renderTons,\n },\n {\n title : 'Harvest Acres',\n data : 'BurnAcres',\n className : 'text-right pr-4',\n defaultContent : '',\n render : renderAcres,\n },\n {\n title : 'Total Requested Acres',\n data : 'TotalRequestedAcres',\n className : 'text-right pr-4',\n defaultContent : '',\n render : renderAcres,\n },\n {\n title : 'Lat, Long',\n visible : false,\n data : '',\n render : renderLatLong,\n },\n ]\n\n if (showLandownerAgent) {\n const landowner = {\n defaultContent : '',\n title : 'Landowner',\n data : 'Landowner',\n width : '150px',\n }\n const agent = {\n defaultContent : '',\n title : 'Agent',\n data : 'Agent',\n width : '150px',\n }\n const agency = {\n defaultContent : '',\n title : 'Agency',\n data : 'Agency',\n width : '150px',\n }\n cols.splice(cols.findIndex(c => c.title === 'Unit Name'), 0, landowner)\n cols.splice(cols.findIndex(c => c.title === 'Unit Name'), 0, agent)\n cols.splice(cols.findIndex(c => c.title === 'Unit Name'), 0, agency)\n }\n\n return cols\n }\n\n static get fields () { \n return {\n // Common Properties\n BurnPermitId : attr(),\n // Model-Specific Properties\n BurnPermitNumber : attr(),\n BurnUnitName : attr(),\n TotalPermitTonnage : attr(),\n Elevation : attr(),\n BurnAcres : attr(),\n TotalRequestedTons : attr(),\n TotalRequestedAcres : attr(),\n AgencyId : attr(),\n Agency : attr(),\n AgentId : attr(),\n Agent : attr(),\n LandownerId : attr(),\n Landowner : attr(),\n LegacyId : attr(),\n BurnPermitExpirationDate : attr(),\n PermitIsSuspended : attr(),\n BurnPermitStatus : attr(),\n BurnPermitStatusDate : attr(),\n LegalDescQ1 : attr(),\n LegalDescQ2 : attr(),\n LegalDescSection : attr(),\n LegalDescTownship : attr(),\n LegalDescRange : attr(),\n LegalDescDirection : attr(),\n Address1 : attr(),\n Address2 : attr(),\n Address3 : attr(),\n AddressCity : attr(),\n AddressState : attr(),\n AddressZip : attr(),\n County : attr(),\n PlannedIgnitionDates : attr(),\n BurnTypes : attr(),\n Latitude : attr(),\n Longitude : attr(),\n PermitOrderId : attr(),\n IsUGA : attr(),\n IsForestHealthExempt : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitSignature extends Model {\n static get modelName () {\n return 'BurnPermitSignature'\n }\n\n static endpoint () {\n return 'BurnPermitSignatures'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitSignatureId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnPermitSignatureId : attr(),\n BurnPermitId : fk({ to: 'BurnPermit', relatedName: 'BurnPermitSignature', as: 'BurnPermit', }),\n ApplicationEnvelopeId : attr(),\n ApplicationSignedDate : attr(),\n ApplicationSignedBy : attr(),\n PermitEnvelopeId : attr(),\n PermitApplicantSignedDate : attr(),\n PermitApplicantSignedBy : attr(),\n PermitApproverSignedDate : attr(),\n PermitApproverSignedBy : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, fk, many, } from 'redux-orm'\nimport * as Yup from 'yup'\nimport { getTodaysDate, } from '../utilities'\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class BurnPermitSite extends Model {\n static get modelName () {\n return 'BurnPermitSite'\n }\n\n toString () {\n return `Burn Permit Site ${this.BurnPermitSiteId}`\n }\n\n static endpoint () {\n return `${REACT_APP_SERVER_URL}BurnPermitSites`\n }\n\n static get validationSchema () {\n return Yup.object().shape({\n HarvestDate: Yup.date()\n .max(getTodaysDate(), 'You cannot enter a future Harvest Date.'),\n BurnUnitName : Yup.string().required('You must enter a name for this Burn Unit.'),\n NumberPeopleOnsite : Yup.number()\n .min(1, 'You must enter the number of people on site.')\n .required('You must enter the number of people on site.'),\n ForestTypeId: Yup.number()\n .min(1, 'You must select a Forest Type for your area.')\n .required('You must select a Forest Type for your area.'),\n BurnReasonId: Yup.number()\n .typeError('You must select a Burn Reason.')\n .min(1, 'You must select a Burn Reason.')\n .required('You must select a Burn Reason.'),\n PlannedBurnDays: Yup.array()\n .min(1, 'You must select at least one day of the week you plan to burn.')\n .required('You must select at least one day of the week you plan to burn.'),\n ClosedSeasonBurn: Yup.bool()\n .required('You must indicate whether or not you plan to burn during the closed season.'),\n BurnPermitSiteEquipment: Yup.array()\n .of(Yup.object().shape({\n OnsiteFlag : Yup.bool(),\n OffsiteFlag : Yup.bool(),\n FireLineConstructionFlag : Yup.bool(),\n ExtinguishingFlag : Yup.bool(),\n OffsiteEquipmentArrivalTime : Yup.string(),\n NumberOfGallons : Yup.number(),\n OtherEquipmentDescription : Yup.string(),\n EquipmentTypeId : Yup.number(),\n })),\n NumberOfHandPilesToBurnAtOnce: Yup.number()\n .min(1, 'The minimum number of Hand piles to burn must be 1 or greater.'),\n NumberOfMachinePilesToBurnAtOnce: Yup.number()\n .min(1, 'The minimum number of Machine piles to burn must be 1 or greater.'),\n })\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitSiteId',\n }\n }\n\n static get fields () {\n return {\n // Common fields\n BurnPermitSiteId : attr(),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n \n // Relationships\n ForestTypeId : fk({ to: 'ForestType', relatedName: 'BurnPermitSites', as: 'ForestType', }),\n BurnPermitSiteEquipment : many({ to: 'BurnPermitSiteEquipmentXref', relatedName: 'BurnPermitSites', }),\n BurnReasonId : fk({ to: 'BurnReason', relatedName: 'BurnPermitSites', as: 'BurnReason', }),\n DaysOfWeek : many({ to: 'DaysOfWeek', relatedName: 'BurnPermitSites', }),\n \n // Attributes\n BurnUnitName : attr(),\n ForestPracticePermitNumber : attr(),\n ClosedSeasonBurn : attr(),\n NumberHandPilesPerBurn : attr(),\n NumberMachinePilesPerBurn : attr(),\n TotalNumberHandPiles : attr(),\n TotalNumberMachinePiles : attr(),\n NumberPeopleOnsite : attr(),\n BarkBeetleOutbreakPreventionFlag : attr(),\n WaitForWetConditionsFlag : attr(),\n HarvestDate : attr(),\n SnowOffDate : attr(),\n HandConstructedPileWidthFeet : attr(),\n MachineConstructedPileWidthFeet : attr(),\n HandConstructedPileHeightFeet : attr(),\n MachineConstructedPileHeightFeet : attr(),\n NumberOfHandPilesToBurnAtOnce : attr(),\n NumberOfMachinePilesToBurnAtOnce : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\r\nimport * as Yup from 'yup'\r\n\r\nexport default class BurnPermitSiteEquipmentXref extends Model {\r\n static get modelName () {\r\n return 'BurnPermitSiteEquipmentXref'\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'BurnPermitSiteEquipmentXrefId',\r\n }\r\n }\r\n\r\n static validationSchema (props) {\r\n const { idx, } = props\r\n return Yup.object().shape({\r\n [`ShowEquipment_${idx}`] : Yup.bool().required('You must choose \\'Yes\\' or \\'No\\''),\r\n [`ShowOther_${idx}`] : Yup.bool(),\r\n EquipmentTypeIds : Yup.array()\r\n .when(`ShowEquipment_${idx}`, {\r\n is : true,\r\n then : Yup.array()\r\n .min(1, 'You must choose one or more Equipment types')\r\n .required('You must choose one or more Equipment types'),\r\n }),\r\n OnsiteFlag : Yup.bool(),\r\n OffsiteFlag : Yup.bool(),\r\n FireLineConstructionFlag : Yup.bool(),\r\n ExtinguishingFlag : Yup.bool(),\r\n OffsiteEquipmentArrivalTime : Yup.string()\r\n .when([ `ShowEquipment_${idx}`, 'OffsiteFlag', 'FireLineConstructionFlag', ], {\r\n is : (show, offsite, fire) => show && offsite && fire,\r\n then : Yup.string()\r\n .ensure()\r\n .required('You must choose an Arrival Time for off site equipment'),\r\n }),\r\n NumberOfGallons: Yup.number()\r\n .nullable()\r\n .when([ `ShowEquipment_${idx}`, 'ExtinguishingFlag', ], {\r\n is : (show, ext) => show && ext,\r\n then : Yup.number()\r\n .min(1, 'You must enter a positive number of gallons available'), \r\n }),\r\n OtherEquipmentDescription: Yup.string()\r\n .nullable()\r\n .when(`ShowOther_${idx}`, {\r\n is: show => {\r\n return show\r\n },\r\n then: Yup.string().required('You must enter a description of the equipment'),\r\n }),\r\n })\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Model-Specific Properties\r\n BurnPermitSiteEquipmentXrefId : attr(),\r\n BurnPermitSiteId : attr(),\r\n EquipmentTypeId : fk({ to: 'EquipmentType', relatedName: 'BurnPermitSiteEquipmentXrefs', }),\r\n OnsiteFlag : attr(),\r\n OffsiteFlag : attr(),\r\n FireLineConstructionFlag : attr(),\r\n ExtinguishingFlag : attr(),\r\n OffsiteEquipmentArrivalTime : attr(),\r\n NumberOfGallons : attr(),\r\n OtherEquipmentDescription : attr(),\r\n \r\n // Audit Properties\r\n CreateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateDate : attr(),\r\n UpdateBy : attr(),\r\n }\r\n }\r\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnPermitStatus extends Model {\n static get modelName () {\n return 'BurnPermitStatus'\n }\n\n toString () {\n return `${this.BurnPermitStatusName}`\n }\n\n static endpoint () {\n return 'BurnPermitStatuses'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitStatusId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnPermitStatusId : attr(),\n BurnPermitStatusName : attr({ getDefault: () => '', }),\n BurnPermitStatusDescription : attr({ getDefault: () => '', }),\n \n // Audit Properties\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\n\nexport default class BurnPermitStatusXref extends Model {\n static get modelName () {\n return 'BurnPermitStatusXref'\n }\n\n toString () {\n return `${this.BurnPermitStatusXrefName}`\n }\n\n static endpoint (permitId, history = false) {\n const url = `BurnPermits/${permitId}/PermitStatus`\n if (history === false) {\n return url\n }\n return `${url}/History`\n }\n \n static deleteEndpoint (permitId, xrefId) {\n const url = `BurnPermits/${permitId}/PermitStatus/${xrefId}`\n return url\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitStatusXrefId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnPermitStatusXrefId : attr(),\n BurnPermitId : fk({ to: 'BurnPermit', relatedName: 'BurnPermitStatusXrefs', as: 'BurnPermit', }),\n BurnPermitStatusId : fk({ to: 'BurnPermitStatus', relatedName: 'BurnPermitStatusXrefs', as: 'BurnPermitStatus', }),\n StatusDate : attr(),\n Comment : attr(),\n \n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\nimport { object, array, string, number, } from 'yup'\n\nexport const MAX_CONTACTS = 5\n\nexport const contactSchema = object().shape({\n Contacts: array().of(\n object().shape({\n BurnPermitRequiredContactConditionId : number(),\n ContactName : string()\n .max(255, 'Contact name must be 255 characters or less')\n .required('Please enter a contact name'),\n PhoneNumber: number()\n .typeError('Phone number must be a number')\n .test('phone-number-length', 'Phone number must be 10 digits', val => {\n return (val || '').toString().length === 10\n })\n .required('Please enter a phone number'),\n PhoneExt: string()\n .max(100, 'Contact name must be 100 characters or less'),\n })\n ).max(MAX_CONTACTS, `A maximum of ${MAX_CONTACTS} required contacts can be saved`),\n})\n\n\nexport default class BurnPermitRequiredContactCondition extends Model {\n static get modelName () {\n return 'BurnPermitRequiredContactCondition'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitRequiredContactConditionId',\n }\n }\n\n static get getValidationSchema () {\n return contactSchema\n }\n\n static get fields () {\n return {\n BurnPermitRequiredContactConditionId : attr(),\n BurnPermitConditionXrefId : fk({ \n to : 'BurnPermitConditionXref', \n as : 'BurnPermitConditionXref',\n relatedName : 'BurnPermitRequiredContactConditions' ,\n }),\n ContactName : attr(),\n PhoneNumber : attr(),\n PhoneExt : attr(),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n }\n }\n}\n","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnPermitUnit extends Model {\n static get modelName () {\n return 'BurnPermitUnit'\n }\n\n toString () {\n return `${this.BurnPermitUnitName}`\n }\n\n static get options () {\n return {\n idAttribute: 'BurnPermitUnitId',\n }\n }\n\n static get fields () {\n return {\n BurnPermitUnitId : attr(),\n BurnPermitUnitName : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnReason extends Model {\n static get modelName () {\n return 'BurnReason'\n }\n\n static endpoint () {\n return 'BurnReasons'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnReasonId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnReasonId : attr(),\n BurnReasonCode : attr(),\n BurnReasonName : attr({ getDefault: () => '', }),\n BurnReasonDescription : attr({ getDefault: () => '', }),\n \n // Audit Properties\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, fk, many, Model, } from 'redux-orm'\nimport { getTomorrowsDate, dateFormatter, getTodaysDate, } from '../utilities'\nimport * as Yup from 'yup'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class BurnRequest extends Model {\n static get modelName () {\n return 'BurnRequest'\n }\n\n toString () {\n return `${this.id}`\n }\n\n static endpoint (burnRequestId = null) {\n let endpoint = `${REACT_APP_SERVER_URL}BurnRequests`\n if (burnRequestId) {\n endpoint += `/${burnRequestId}`\n }\n return endpoint\n }\n\n static postBurnEndpoint ({ burnRequestId, }) {\n let endpoint = `${REACT_APP_SERVER_URL}BurnRequests`\n if (burnRequestId) {\n endpoint += `/${burnRequestId}/PostBurn`\n }\n return endpoint\n }\n\n static getValidationSchema (isDnr = false) {\n const {\n PlannedIgnitionPeriod,\n ProposedBurnArea,\n TotalProposedBurnQuantity,\n } = this.fields\n\n const schemaShape = {\n PlannedIgnitionTime: Yup.string()\n .test(\n 'between-0600-and-1800',\n 'Ignition time must be between the hours of 0600 and 1800',\n (ignTime) => {\n if (!ignTime) {\n return false\n }\n const hoursMins = parseInt(ignTime.replace(':', ''))\n return hoursMins >= 600 && hoursMins <= 1800\n }\n )\n .required('Please enter an ignition time'),\n PlannedIgnitionPeriod: Yup.number()\n .typeError('Ignition period must be a number')\n .min(PlannedIgnitionPeriod.opts.min, `Ignition period must be between ${PlannedIgnitionPeriod.opts.min} and ${PlannedIgnitionPeriod.opts.max}`)\n .max(PlannedIgnitionPeriod.opts.max, `Ignition period must be between ${PlannedIgnitionPeriod.opts.min} and ${PlannedIgnitionPeriod.opts.max}`)\n .required('Please enter an ignition duration'),\n ProposedBurnArea: Yup.number()\n .typeError('Burn area must be a number')\n .min(ProposedBurnArea.opts.min, `Burn area must be greater than ${ProposedBurnArea.opts.min}`)\n .required('Please enter the amount of acres to be burned')\n .test(\n 'proposed-burn-acres-must-be-less-than-remaining-permit-acres',\n 'The requested burn acres cannot exceed the remaining permit acreage.',\n function (acres) {\n return acres <= this.parent.RemainingPermitAcres\n }\n ),\n TotalProposedBurnQuantity: Yup.number()\n .typeError('Burn tonnage must be a number')\n .min(TotalProposedBurnQuantity.opts.min, `Burn tonnage must be at least ${TotalProposedBurnQuantity.opts.min}`)\n .required('Please enter the tonnage to be burned')\n .test(\n 'proposed-quantity-must-be-less-than-remaining-permit-tonnage',\n 'The requested tonnage cannot exceed the remaining permit tonnage.',\n function (tons) {\n return tons <= this.parent.RemainingPermitTonnage\n }\n ),\n MultiDayBurnFlag : Yup.boolean().required('Please choose Multi-Day or Single Day'),\n DaysOfWeek : Yup.array().min(1, 'You must select at least one Burn Day.').nullable()\n .test(\n 'days-must-be-consecutive',\n 'You must select consecutive days for a Multi-Day Burn.',\n function (daysOfWeek) {\n if (!this.parent.PlannedIgnitionDate || (daysOfWeek && daysOfWeek.length === 1)) {\n return true\n }\n\n if (!daysOfWeek) {\n return false\n }\n \n const ignDate = dateFormatter(this.parent.PlannedIgnitionDate)\n const ignDay = ignDate.day() + 1\n // transform daysOfWeek ints to dates based on `this.parent.PlannedIgnitionDate`\n const burnDates = daysOfWeek\n .map(d => {\n const diff = d - ignDay\n // Day of the week after the ignition date \n if (diff < 0) {\n return ignDate.add(7 - Math.abs(diff), 'day')\n }\n // Day of the week of the ignition date\n else if (diff > 0) {\n return ignDate.add(diff, 'day')\n }\n // Day of the igition date\n return ignDate\n }, [])\n // sort the transformed array\n .sort((d1, d2) => d2.isAfter(d1) ? -1 : 1)\n\n let isValid = true\n for (let i = 0, len = burnDates.length; i < len; i++) {\n if (i + 1 === len) {\n break\n }\n const currItem = burnDates[i]\n const nextItem = burnDates[i + 1]\n // compare date diffs to ensure they're consecutive\n isValid = (currItem && nextItem && currItem.diff(nextItem, 'day') === -1)\n if (!isValid) {\n break\n }\n }\n return isValid\n }\n ),\n }\n \n // add ignition date validators\n schemaShape.PlannedIgnitionDate = Yup.date().required('Please enter an ignition date')\n if (!isDnr) {\n schemaShape.PlannedIgnitionDate = schemaShape.PlannedIgnitionDate\n .when('ParentRequestId', {\n is : (prid) => (!!prid) && !isNaN(prid),\n then : schemaShape.PlannedIgnitionDate.max(getTomorrowsDate(), 'Ignition date must be within 24 hours.'),\n otherwise : schemaShape.PlannedIgnitionDate.min(getTomorrowsDate(), 'You must enter a future date.'),\n })\n .when('TotalProposedBurnQuantity', {\n is : tons => tons >= 100,\n then : schemaShape.PlannedIgnitionDate.min(getTomorrowsDate(), 'You must enter a future date.'),\n otherwise : schemaShape.PlannedIgnitionDate.min(getTodaysDate(), 'You must enter today's date or a future date.'),\n })\n }\n \n return Yup.object().shape(schemaShape)\n }\n \n static get options () {\n return {\n idAttribute: 'BurnRequestId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n BurnRequestId : attr(),\n // Model-Specific Properties\n MultiDayBurnFlag : attr(),\n BurnPriority : attr(),\n BurnRequestDate : attr(),\n PlannedIgnitionDate : attr(),\n PlannedIgnitionPeriod : attr({ min: 0, max: 480, }),\n PlannedIgnitionTime : attr(),\n SmokeDispersedFlag : attr(),\n TotalProposedBurnQuantity : attr({ min: 0.01, }),\n ProposedBurnArea : attr({ min: 0.01, }),\n RequestorComments : attr(),\n AutoGenerated : attr(),\n ParentRequestId : attr(),\n \n // Relationships\n BurnPermitId : fk({ to: 'BurnPermit', relatedName: 'BurnRequests', as: 'BurnPermit', }),\n BurnRequestStatuses : many({ to: 'BurnRequestStatus', as: 'BurnRequestStatuses', through: 'BurnRequestStatusXref', }),\n DaysOfWeek : many({ to: 'DaysOfWeek', relatedName: 'BurnRequests', }),\n \n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnRequestCancellationReason extends Model {\n static get modelName () {\n return 'BurnRequestCancellationReason'\n }\n\n toString () {\n return `${this.BurnRequestCancellationReason}`\n }\n\n static endpoint () {\n return 'BurnRequestCancellationReasons'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnRequestCancellationReasonId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnRequestCancellationReasonId : attr(),\n BurnRequestCancellationReason : attr({ getDefault: () => '', }),\n BurnRequestCancellationReasonDescription : attr({ getDefault: () => '', }),\n \n // Audit Properties\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { Model, attr, } from 'redux-orm'\nimport { renderCheckIcon, renderDateTime, renderTons, renderAcres, renderCheckOrXIcon, renderLatLong, } from '../utilities/columnHelpers'\nimport { dateFormatter, objectToQueryParams, objHasProp, } from '../utilities'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\n\nexport default class BurnRequestSearch extends Model {\n\n static get modelName () {\n return 'BurnRequestSearch'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnRequestId',\n }\n }\n\n static getDataTablesColumns (props) {\n \n let showLandownerAgent = false\n \n if (props && objHasProp(props, 'showLandownerAgent')) {\n showLandownerAgent = props.showLandownerAgent\n }\n \n const cols = [\n {\n title : 'Burn Request ID',\n data : 'BurnRequestId',\n className : 'text-right pr-4',\n type : 'num',\n },\n {\n title : 'Post-Burn',\n data : 'HasPostBurn',\n searchable : false,\n render : renderCheckOrXIcon,\n }, \n {\n title : 'Permit Number',\n data : 'BurnPermitNumber',\n className : 'text-right pr-4',\n },\n {\n title : 'Application ID',\n data : 'BurnPermitId',\n type : 'num',\n visible : false,\n className : 'text-right pr-4',\n },\n {\n title : 'Unit Name',\n data : 'BurnUnitName',\n width : '100px',\n },\n {\n title : 'Request Date',\n data : 'BurnRequestDate',\n className : 'text-right pr-4',\n render : renderDateTime,\n width : '75px',\n },\n {\n title : 'Multi Day Burn',\n data : 'MultiDayBurn',\n defaultContent : '',\n render : renderCheckIcon,\n },\n {\n title : 'Burn Priority',\n data : 'BurnPriority',\n visible : false,\n },\n {\n title : 'Status',\n data : 'BurnRequestStatus',\n width : '75px',\n render : (data, drawType, row) => {\n if (drawType === 'sort') {\n return row.BurnRequestStatusDate\n }\n if (drawType !== 'display') {\n return row.BurnRequestStatus\n }\n else if (!data) {\n return data\n }\n return `${row.BurnRequestStatus}
${dateFormatter(row.BurnRequestStatusDate, 'MMM DD, YYYY')}`\n },\n },\n {\n title : 'Ignition Date',\n data : 'PlannedIgnitionDate',\n render : (data, drawType, row) => {\n if (drawType !== 'display') {\n return data\n }\n return `${dateFormatter(data, 'MMM DD, YYYY')} ${row.PlannedIgnitionTime}`\n },\n },\n {\n title : 'Post Burn Date',\n data : 'PostBurnDate',\n className : 'text-right pr-4',\n render : renderDateTime,\n },\n {\n title : 'Ignition Period',\n data : 'PlannedIgnitionPeriod',\n render : (data, drawType) => {\n if (drawType !== 'display') {\n return data\n }\n return `${data} mins`\n },\n },\n {\n title : 'In UGA',\n data : 'IsUGA',\n render : renderCheckOrXIcon,\n },\n {\n title : 'Forest Health Exempt',\n data : 'IsForestHealthExempt',\n defaultContent : '',\n render : (data, drawType) => {\n if (drawType === 'sort') {\n return data === null ? 0 : data === true ? 1 : -1\n }\n if (drawType !== 'display') {\n return data\n }\n if (data === null) {\n return data\n }\n return renderCheckOrXIcon(data, drawType)\n },\n },\n {\n title : 'Smoke Dispersed',\n data : 'SmokeDispersedFlag',\n defaultContent : '',\n render : renderCheckIcon,\n visible : false,\n },\n {\n title : 'Est. Permit Tonnage',\n data : 'TotalPermitTonnage',\n className : 'text-right pr-4',\n render : renderTons,\n },\n {\n title : 'Total Proposed Burn',\n data : 'TotalProposedBurnQuantity',\n className : 'text-right pr-4',\n render : renderTons,\n },\n {\n title : 'Post Burn Tonnage',\n data : 'PostBurnTonnage',\n className : 'text-right pr-4',\n render : renderTons,\n },\n {\n title : 'Harvest Acres',\n data : 'BurnAcres',\n className : 'text-right pr-4',\n render : renderAcres,\n },\n {\n title : 'Proposed Burn Area',\n data : 'ProposedBurnArea',\n className : 'text-right pr-4',\n render : renderAcres,\n },\n {\n title : 'Post Burn Area',\n data : 'PostBurnArea',\n className : 'text-right pr-4',\n render : renderAcres,\n }, \n {\n title : 'Lat, Long',\n data : '',\n visible : false,\n render : renderLatLong,\n },\n ]\n\n if (showLandownerAgent) {\n const landowner = {\n defaultContent : '',\n title : 'Landowner',\n data : 'Landowner',\n width : '150px',\n }\n const agent = {\n defaultContent : '',\n title : 'Agent',\n data : 'Agent',\n width : '150px',\n }\n cols.splice(cols.findIndex(c => c.title === 'Unit Name'), 0, landowner)\n cols.splice(cols.findIndex(c => c.title === 'Unit Name'), 0, agent)\n }\n\n return cols\n }\n\n static endpoint (params) {\n let endpoint = `${REACT_APP_SERVER_URL}BurnRequests/Search`\n if (params && typeof params === 'object') {\n endpoint += `?${objectToQueryParams(params)}`\n }\n return endpoint\n }\n\n static get fields () { \n return {\n BurnRequestId : attr(),\n BurnPermitId : attr(),\n BurnPermitNumber : attr(),\n BurnRequestStartDate : attr(),\n BurnRequestEndDate : attr(),\n PlannedIgnitionStartDate : attr(),\n PlannedIgnitionEndDate : attr(),\n AssignedToId : attr(),\n RequestStatusId : attr(),\n UnitName : attr(),\n County : attr(),\n Region : attr(),\n LegalDesc : attr(),\n MinAcres : attr(),\n MaxAcres : attr(),\n MinTons : attr(),\n MaxTons : attr(),\n BurnType : attr(),\n AgentName : attr(),\n LandownerName : attr(),\n HasPostBurn : attr(),\n MultiDayBurns : attr(),\n IsUGA : attr(),\n IsForestHealthExempt : attr(),\n PostBurnDate : attr(),\n PostBurnTonnage : attr(),\n PostBurnArea : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnRequestStatus extends Model {\n static get modelName () {\n return 'BurnRequestStatus'\n }\n\n toString () {\n return `${this.BurnRequestStatusName}`\n }\n\n static endpoint () {\n return 'BurnRequestStatuses'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnRequestStatusId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnRequestStatusId : attr(),\n BurnRequestStatusName : attr({ getDefault: () => '', }),\n BurnRequestStatusDescription : attr({ getDefault: () => '', }),\n \n // Audit Properties\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class BurnRequestStatusXref extends Model {\n static get modelName () {\n return 'BurnRequestStatusXref'\n }\n\n toString () {\n return `${this.BurnRequestStatusXrefName}`\n }\n\n static endpoint (requestId, history = false) {\n let url = `${REACT_APP_SERVER_URL}BurnRequests`\n \n if (requestId) {\n url += `/${requestId}`\n }\n \n url += '/RequestStatus'\n \n if (history === false) {\n return url\n }\n \n url += '/History'\n\n if (!requestId) {\n url += '/Download'\n }\n\n return url\n }\n \n static deleteEndpoint (requestId, xrefId) {\n const url = `${REACT_APP_SERVER_URL}BurnRequests/${requestId}/RequestStatus/${xrefId}`\n return url\n }\n\n static get options () {\n return {\n idAttribute: 'BurnRequestStatusXrefId',\n }\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnRequestStatusXrefId : attr(),\n BurnRequestId : fk({ as: 'BurnRequest', to: 'BurnRequest', relatedName: 'BurnRequestStatusXrefs', }),\n BurnRequestStatusId : fk({ to: 'BurnRequestStatus', relatedName: 'BurnRequestStatusXrefs', as: 'BurnRequestRequestStatus', }),\n BurnRequestCancellationReasonId : fk({ to: 'BurnRequestCancellationReason', relatedName: 'BurnRequestCancellationReasons', as: 'BurnRequestCancellationReason', }),\n StatusDate : attr(),\n Comment : attr(),\n AssignedToId : fk({ to: 'ApplicationUser', relatedName: 'BurnRequestAssignedUsers', as: 'AssignedTo', }),\n SiteInspected : attr(),\n InternalOnly : attr(),\n \n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class BurnType extends Model {\n static get modelName () {\n return 'BurnType'\n }\n\n toString () {\n return `${this.BurnTypeName}`\n }\n\n static endpoint () {\n return 'BurnTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnTypeId',\n }\n }\n\n static get fields () {\n return {\n BurnTypeId : attr({ type: 'number', }),\n BurnTypeName : attr(),\n BurnTypeDescription : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class ContactMethod extends Model {\n static get modelName () {\n return 'ContactMethod'\n }\n\n toString () {\n return `${this.ContactMethodName}`\n }\n\n static endpoint () {\n return 'ContactMethods'\n }\n\n static get options () {\n return {\n idAttribute: 'ContactMethodId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n ContactMethodId : attr({ inputType: 'number', inputLabel: 'Contact Method Id', }),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n ContactMethodName : attr(),\n ContactMethodDescription : attr(),\n \n // Relationships\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class County extends Model {\n static get modelName () {\n return 'County'\n }\n\n toString () {\n return `${this.CountyName}`\n }\n\n static endpoint () {\n return 'Counties'\n }\n\n static get options () {\n return {\n idAttribute: 'CountyId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n CountyId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n CountyName : attr(),\n\n // Relationships\n }\n }\n}","import { attr, fk, many, Model, } from 'redux-orm'\n\nexport default class CustomerInteraction extends Model {\n static get modelName () {\n return 'CustomerInteraction'\n }\n\n toString () {\n return `${this.CustomerInteractionId}`\n }\n\n static endpoint () {\n return 'CustomerInteractions'\n }\n\n static get options () {\n return {\n idAttribute: 'CustomerInteractionId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n CustomerInteractionId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Model-Specific Properties\n FollowUp : attr(),\n FirstName : attr(),\n LastName : attr(),\n PhoneNumber : attr(),\n EmailAddress : attr(),\n InteractionDescription : attr(),\n Latitude : attr(),\n Longitude : attr(),\n Address : attr(),\n\n // Relationships\n CustomerInteractionStatuses: many({\n to : 'CustomerInteractionStatus',\n relatedName : 'CustomerInteractionStatuses',\n as : 'CustomerInteractionStatuses',\n }),\n CustomerInteractionTypeId: fk({\n to : 'CustomerInteractionType',\n relatedName : 'CustomerInteractions',\n as : 'CustomerInteractionType',\n }),\n ContactMethodId: fk({\n to : 'ContactMethod',\n relatedName : 'CustomerInteractions',\n as : 'ContactMethod',\n }),\n BurnPermitId: fk({\n to : 'BurnPermit',\n relatedName : 'CustomerInteractions',\n as : 'BurnPermit',\n }),\n BurnRequestId: fk({\n to : 'BurnRequest',\n relatedName : 'CustomerInteractions',\n as : 'BurnRequest',\n }),\n RegionId: fk({\n to : 'Region',\n relatedName : 'CustomerInteractions',\n as : 'Region',\n }),\n }\n }\n}\n","import { attr, Model, } from 'redux-orm'\n\nexport default class CustomerInteractionBurnPermitXref extends Model {\n static get modelName () {\n return 'CustomerInteractionBurnPermitXref'\n }\n\n toString () {\n return `${this.CustomerInteractionBurnPermitXrefId}`\n }\n\n static endpoint () {\n return 'CustomerInteractionBurnPermitXrefs'\n }\n\n static get options () {\n return {\n idAttribute: 'CustomerInteractionBurnPermitXrefId',\n }\n }\n\n static get fields () {\n return {\n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Relationships\n CustomerInteractionBurnPermitXrefId : attr(),\n CustomerInteractionId : attr(),\n // fk({\n // to : 'CustomerInteraction',\n // relatedName : 'CustomerInteractionBurnPermitXrefs',\n // as : 'CustomerInteraction',\n // }),\n BurnPermitId : attr(),\n // fk({\n // to : 'BurnRequest',\n // relatedName : 'CustomerInteractionBurnPermitXrefs',\n // as : 'BurnRequest',\n // }),\n }\n }\n}\n","import { attr, fk, Model, } from 'redux-orm'\n\nexport default class CustomerInteractionDocument extends Model {\n static get modelName () {\n return 'CustomerInteractionDocument'\n }\n\n toString () {\n return `${this.CustomerInteractionDocumentId}`\n }\n\n static endpoint () {\n return 'CustomerInteractionDocuments'\n }\n\n static get options () {\n return {\n idAttribute: 'CustomerInteractionDocumentId',\n }\n }\n\n static get fields () {\n return {\n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Model-Specific Properties\n CustomerInteractionDocumentId : attr(),\n DocumentName : attr(),\n DocumentKey : attr(),\n\n // Relationships\n CustomerInteractionId: fk({\n to : 'CustomerInteraction',\n relatedName : 'CustomerInteractionDocuments',\n as : 'CustomerInteraction',\n }),\n }\n }\n}\n","import { attr, Model, } from 'redux-orm'\n\nexport default class CustomerInteractionStatus extends Model {\n static get modelName () {\n return 'CustomerInteractionStatus'\n }\n\n toString () {\n return `${this.CustomerInteractionStatusId}`\n }\n\n static endpoint () {\n return 'CustomerInteractionStatuses'\n }\n\n static get options () {\n return {\n idAttribute: 'CustomerInteractionStatusId',\n }\n }\n\n static get fields () {\n return {\n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Model-Specific Properties\n CustomerInteractionStatusId : attr(),\n CustomerInteractionStatusName : attr(),\n CustomerInteractionStatusDescription : attr(),\n }\n }\n}\n","import { attr, fk, Model, } from 'redux-orm'\n\nexport default class CustomerInteractionStatusXref extends Model {\n static get modelName () {\n return 'CustomerInteractionStatusXref'\n }\n\n toString () {\n return `${this.CustomerInteractionStatusXrefId}`\n }\n\n static get options () {\n return {\n idAttribute: 'CustomerInteractionStatusXrefId',\n }\n }\n\n static get fields () {\n return {\n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Model-Specific Properties\n CustomerInteractionStatusXrefId : attr(),\n StatusDate : attr(),\n Comment : attr(),\n CommentInternalOnly : attr(),\n ContactedReportingParty : attr(),\n\n // Relationships\n CustomerInteractionId: fk({\n to : 'CustomerInteraction',\n relatedName : 'CustomerInteractionStatusXrefs',\n as : 'CustomerInteraction',\n }),\n CustomerInteractionStatusId: fk({\n to : 'CustomerInteractionStatus',\n relatedName : 'CustomerInteractionStatusXrefs',\n as : 'CustomerInteractionStatus',\n }),\n AssignedToId: fk({\n to : 'ApplicationUser',\n relatedName : 'CustomerInteractionAssignedUsers',\n as : 'AssignedTo',\n }),\n }\n }\n}\n","import { attr, Model, } from 'redux-orm'\n\nexport default class CustomerInteractionType extends Model {\n static get modelName () {\n return 'CustomerInteractionType'\n }\n\n toString () {\n return `${this.CustomerInteractionTypeId}`\n }\n\n static endpoint () {\n return 'CustomerInteractionTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'CustomerInteractionTypeId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Model-Specific Properties\n CustomerInteractionTypeId : attr(),\n CustomerInteractionTypeName : attr(),\n }\n }\n}\n","import { attr, Model, } from 'redux-orm'\n\nexport default class DaysOfWeek extends Model {\n static get modelName () {\n return 'DaysOfWeek'\n }\n\n toString () {\n return `${this.DayOfWeekName}`\n }\n\n static endpoint () {\n return 'DaysOfWeek'\n }\n\n static get options () {\n return {\n idAttribute: 'DayOfWeekId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n DayOfWeekId : attr({ type: 'number', }),\n CreateDate : attr(),\n UpdateDate : attr(),\n // Model-Specific Properties\n DayOfWeekName : attr(),\n\n // Relationships\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class Direction extends Model {\n static get modelName () {\n return 'Direction'\n }\n\n toString () {\n return `${this.DirectionName}`\n }\n\n static endpoint () {\n return 'Directions'\n }\n\n static get options () {\n return {\n idAttribute: 'DirectionId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n DirectionId : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n // Model-Specific Properties\n DirectionName : attr(),\n DirectionAbbreviation : attr(),\n\n // Relationships\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class Distance extends Model {\n static get modelName () {\n return 'Distance'\n }\n\n toString () {\n return `${this.DistanceName}`\n }\n\n static endpoint () {\n return 'Distances'\n }\n\n static get options () {\n return {\n idAttribute: 'DistanceId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n DistanceId : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n // Model-Specific Properties\n DistanceName : attr(),\n\n // Relationships\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class DuffType extends Model {\n static get modelName () {\n return 'DuffType'\n }\n\n toString () {\n return `${this.DuffTypeName}`\n }\n\n static endpoint () {\n return 'DuffTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'DuffTypeId',\n }\n }\n\n static get fields () {\n return {\n DuffTypeId : attr({ type: 'number', }),\n DuffTypeName : attr(),\n CreateBy : attr(),\n CreateDate : attr(),\n UpdateBy : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\nimport { number, string, } from 'prop-types'\nimport * as Yup from 'yup'\n\nexport default class Email extends Model {\n static get modelName () {\n return 'Email'\n }\n\n toString () {\n return `${this.EmailAddress}`\n }\n\n static endpoint () {\n return 'Emails'\n }\n\n static getValidationSchema (isEmailRequired) {\n const {\n EmailAddress,\n } = this.fields\n\n let emailAddr = Yup.string()\n .ensure()\n .email('Please enter a valid email address')\n .max(EmailAddress.opts.max, `Email address must be ${EmailAddress.opts.max} characters or less`)\n\n if (isEmailRequired) {\n emailAddr = emailAddr.required('Please enter an email address')\n } else {\n emailAddr = emailAddr.notRequired()\n }\n\n return Yup.object().shape({\n EmailAddress: emailAddr,\n })\n }\n\n static get options () {\n return {\n idAttribute: 'EmailId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n EmailId : attr({ inputType: 'number', inputLabel: 'Email Id', }),\n CreateDate : attr({ getDefault: () => new Date().toISOString(), }),\n CreateBy : attr(),\n UpdateDate : attr({ getDefault: () => new Date().toISOString(), }),\n UpdateBy : attr(),\n // Model-Specific Properties\n EmailAddress : attr({ getDefault: () => '', max: 256, }),\n NormalizedEmailAddress : attr({ getDefault: () => '', }),\n EmailConfirmed : attr(),\n\n // Reverse fields\n // Agencies\n }\n }\n\n static get propTypes () {\n return {\n EmailId : number,\n CreateDate : string,\n CreateBy : string,\n UpdateDate : string,\n UpdateBy : string,\n EmailAddress : string,\n NormalizedEmailAddress : string,\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class EquipmentType extends Model {\n static get modelName () {\n return 'EquipmentType'\n }\n\n toString () {\n return `${this.EquipmentTypeName}`\n }\n\n static endpoint () {\n return 'EquipmentTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'EquipmentTypeId',\n }\n }\n\n static get fields () {\n return {\n EquipmentTypeId : attr({ type: 'number', }),\n EquipmentTypeName : attr(),\n EquipmentTypeDescription : attr(),\n EquipmentTypeCategoryName : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class FireDistrictDepartment extends Model {\n static get modelName () {\n return 'FireDistrictDepartment'\n }\n\n toString () {\n return `${this.FireDistrictDepartmentDescription}`\n }\n\n static endpoint () {\n return 'FireDistrictDepartments'\n }\n\n static get options () {\n return {\n idAttribute: 'FireDistrictDepartmentId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n FireDistrictDepartmentId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n FireDistrictDepartmentCode : attr(),\n FireDistrictDepartmentDescription : attr(),\n\n // Relationships\n }\n }\n}","import { attr, Model, many, } from 'redux-orm'\nimport * as Yup from 'yup'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class ForestHealthExempt extends Model {\n static get modelName () {\n return 'ForestHealthExempt'\n }\n\n toString () {\n return `Forest Health Exempt ${this.ForestHealthExemptId}`\n }\n\n static endpoint () {\n return `${REACT_APP_SERVER_URL}ForestHealthExemptions`\n }\n\n static get options () {\n return {\n idAttribute: 'ForestHealthExemptId',\n }\n }\n\n static getValidationSchema () {\n return Yup.object().shape({\n ForestHealthExemptId : Yup.number(),\n ProblemTypeId : Yup.number().required('You must select a Problem Type'),\n AlternativeToRxFire : Yup.string().required('You must describe the forest health situation and the objectives to be achieved with burning'),\n })\n }\n\n static get fields () {\n return {\n // Common Properties\n ForestHealthExemptId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n AlternativeToRxFire : attr(),\n AlternativeNotAppropriateReason : attr(),\n ForestHealthExemptionApprovalFlag : attr(),\n ForestHealthExemptionApprovalDate : attr(),\n\n // Relationships\n ForestHealthProblemTypes: many({ to: 'ForestHealthProblemType', as: 'ForestHealthProblemTypes', through: 'ForestHealthExemptProblemTypeXref', }),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class ForestHealthProblemType extends Model {\n static get modelName () {\n return 'ForestHealthProblemType'\n }\n\n toString () {\n return `${this.ForestHealthProblemTypeName}`\n }\n\n static endpoint () {\n return 'ForestHealthProblemTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'ForestHealthProblemTypeId',\n }\n }\n\n static get fields () {\n return {\n ForestHealthProblemTypeId : attr({ type: 'number', }),\n ForestHealthProblemTypeName : attr(),\n ForestHealthProblemTypeDescription : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, fk, Model, } from 'redux-orm'\n\n/**\n * ForestHealthExemptProblemTypeXref model\n */\nexport default class ForestHealthExemptProblemTypeXref extends Model {\n static get modelName () {\n return 'ForestHealthExemptProblemTypeXref'\n }\n\n static get options () {\n return {\n idAttribute: 'ForestHealthExemptProblemTypeXrefId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n ForestHealthExemptProblemTypeXrefId : attr(),\n ForestHealthExemptId : fk({ to: 'ForestHealthExempt', relatedName: 'ForestHealthExemptProblemTypeXrefs', as: 'ForestHealthExempt', }),\n ForestHealthProblemTypeId : fk({ to: 'ForestHealthProblemType', relatedName: 'ForestHealthExemptProblemTypeXrefs', as: 'ForestHealthProblemType', }),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class ForestType extends Model {\n static get modelName () {\n return 'ForestType'\n }\n\n toString () {\n return `${this.ForestTypeName}`\n }\n\n static endpoint () {\n return 'ForestTypes'\n }\n\n static getDataTablesColumns () {\n return [\n {\n title : 'Forest Type Name',\n data : 'ForestTypeName',\n },\n {\n title : 'Detailed Forest Type',\n data : 'ForestTypeExtendedName',\n },\n {\n title : 'Forest Type/Fuel Description',\n data : 'ForestTypeDescription',\n },\n ]\n }\n\n static get options () {\n return {\n idAttribute: 'ForestTypeId',\n }\n }\n \n static get fields () {\n return {\n // Common Properties\n ForestTypeId : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n \n // Model-Specific Properties\n ForestTypeName : attr(),\n ForestTypeDescription : attr(),\n ForestTypeLocationName : attr(),\n ForestTypeExtendedName : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class FuelDiameter extends Model {\n static get modelName () {\n return 'FuelDiameter'\n }\n\n toString () {\n return `${this.FuelDiameterName}`\n }\n\n static endpoint () {\n return 'FuelDiameters'\n }\n\n static get options () {\n return {\n idAttribute: 'FuelDiameterId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n FuelDiameterId : attr(),\n // Model-Specific Properties\n FuelDiameterName : attr(),\n FuelDiameterDescription : attr(),\n FuelDiameterCategory : attr(),\n \n // Audit Properties\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class LocationQuarter extends Model {\n static get modelName () {\n return 'LocationQuarter'\n }\n\n toString () {\n return `${this.LocationQuarterName}`\n }\n \n endpoint = () => {\n return 'LocationQuarters'\n }\n\n static get options () {\n return {\n idAttribute: 'LocationQuarterId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n LocationQuarterId : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n // Model-Specific Properties\n LocationQuarterName : attr(),\n LocationQuarterDescription : attr(),\n\n // Relationships\n }\n }\n}","import { attr, fk, Model, many, } from 'redux-orm'\r\nimport { number, string, } from 'prop-types'\r\nimport * as Yup from 'yup'\r\nimport { renderCheckIcon, } from '../utilities/columnHelpers'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nexport default class Person extends Model {\r\n static get modelName () {\r\n return 'Person'\r\n }\r\n\r\n toString () {\r\n return `${(this.PersonFirstName || '').trim()} ${(this.PersonLastName || '').trim()}`.trim()\r\n }\r\n\r\n static endpoint ({ dnrOnly, personId, }) {\r\n let personEndpoint = `${REACT_APP_SERVER_URL}People`\r\n if (dnrOnly) {\r\n personEndpoint += '/DNR'\r\n }\r\n if (Number.isInteger(personId)) {\r\n personEndpoint += `/${personId}/UserInfo`\r\n }\r\n return personEndpoint\r\n }\r\n\r\n static getDataTablesColumns (full = false) {\r\n if (full){\r\n return [ {\r\n title : 'Id',\r\n type : 'num',\r\n data : 'PersonId',\r\n width : 15,\r\n },\r\n {\r\n title : 'Type',\r\n data : 'PersonTypeName',\r\n },\r\n {\r\n title : 'First Name',\r\n data : 'PersonFirstName',\r\n },\r\n {\r\n title : 'Middle Name',\r\n data : 'PersonMiddleName',\r\n visible : false,\r\n },\r\n {\r\n title : 'Last Name',\r\n data : 'PersonLastName',\r\n },\r\n {\r\n title : 'Is User',\r\n data : 'IsUser',\r\n render : renderCheckIcon,\r\n },\r\n {\r\n title : 'Email',\r\n data : 'EmailAddress',\r\n },\r\n {\r\n title : 'Region',\r\n data : 'RegionName',\r\n },\r\n {\r\n title : 'Agency',\r\n data : 'AgencyName',\r\n },\r\n {\r\n title : 'Phone',\r\n data : 'PhoneNumber',\r\n visible : false,\r\n }, ]\r\n } else {\r\n return [ {\r\n title : 'Id',\r\n type : 'num',\r\n data : 'PersonId',\r\n width : 15,\r\n },\r\n {\r\n title : 'First Name',\r\n data : 'PersonFirstName',\r\n },\r\n {\r\n title : 'Middle Name',\r\n data : 'PersonMiddleName',\r\n visible : false,\r\n },\r\n {\r\n title : 'Last Name',\r\n data : 'PersonLastName',\r\n },\r\n {\r\n title : 'Is User',\r\n data : 'IsUser',\r\n render : renderCheckIcon,\r\n },\r\n {\r\n title : 'Email',\r\n data : 'EmailAddress',\r\n },\r\n {\r\n title : 'Phone',\r\n data : 'PhoneNumber',\r\n visible : false,\r\n }, ]\r\n }\r\n }\r\n\r\n static getValidationSchema () {\r\n const {\r\n PersonFirstName,\r\n PersonMiddleName,\r\n PersonLastName,\r\n } = this.fields\r\n\r\n return Yup.object().shape({\r\n PersonFirstName: Yup.string()\r\n .max(PersonFirstName.opts.max, `First name must be ${PersonFirstName.opts.max} characters or less`)\r\n .required('Please enter a first name'),\r\n PersonMiddleName: Yup.string()\r\n .max(PersonMiddleName.opts.max, `Middle name must be ${PersonMiddleName.opts.max} characters or less`)\r\n .ensure(),\r\n PersonLastName: Yup.string()\r\n .max(PersonLastName.opts.max, `Last name must be ${PersonLastName.opts.max} characters or less`)\r\n .required('Please enter a last name'),\r\n PersonTypeId: Yup.number()\r\n .min(1, 'Please select a person type')\r\n .required('Please select a person type'),\r\n ContactMethodId: Yup.number()\r\n .min(1, 'Please select a contact method')\r\n .required('Please select a contact method'),\r\n })\r\n }\r\n\r\n static getMinValidationSchema () {\r\n const {\r\n PersonFirstName,\r\n PersonMiddleName,\r\n PersonLastName,\r\n } = this.fields\r\n\r\n return Yup.object().shape({\r\n PersonFirstName: Yup.string()\r\n .max(PersonFirstName.opts.max, `First name must be ${PersonFirstName.opts.max} characters or less`)\r\n .required('Please enter a first name'),\r\n PersonMiddleName: Yup.string()\r\n .max(PersonMiddleName.opts.max, `Middle name must be ${PersonMiddleName.opts.max} characters or less`)\r\n .ensure(),\r\n PersonLastName: Yup.string()\r\n .max(PersonLastName.opts.max, `Last name must be ${PersonLastName.opts.max} characters or less`)\r\n .required('Please enter a last name'),\r\n })\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'PersonId',\r\n }\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Common Properties\r\n PersonId : attr(),\r\n CreateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateDate : attr(),\r\n UpdateBy : attr(),\r\n // Model-Specific Properties\r\n PersonFirstName : attr({ max: 80, }),\r\n PersonMiddleName : attr({ max: 80, }),\r\n PersonLastName : attr({ max: 80, }),\r\n IsUser : attr(),\r\n ParentId : attr(),\r\n ConvertedToAgency : attr(),\r\n \r\n // Relationships\r\n \r\n EmailId : fk({ to: 'Email', relatedName: 'People', as: 'Email', }),\r\n ContactMethodId : fk({ to: 'ContactMethod', relatedName: 'People', as: 'ContactMethod', }),\r\n PersonTypeId : fk({\r\n to : 'PersonType',\r\n relatedName : 'People',\r\n as : 'PersonType',\r\n }),\r\n AlertPreferences: many({\r\n to : 'AlertPreference',\r\n relatedName : 'People',\r\n through : 'PersonAlertPreferenceXref',\r\n }),\r\n Addresses: many({ \r\n to : 'Address', \r\n relatedName : 'People',\r\n }),\r\n Phones: many({ \r\n to : 'Phone',\r\n relatedName : 'People',\r\n }),\r\n Regions: many({\r\n to : 'Region',\r\n relatedName : 'People',\r\n through : 'PersonRegionXref',\r\n }),\r\n Agencies: many({\r\n to : 'Agency',\r\n relatedName : 'People',\r\n through : 'PersonAgencyXref',\r\n }),\r\n }\r\n }\r\n\r\n static get propTypes () {\r\n return {\r\n PersonId : number,\r\n CreateDate : string,\r\n UpdateDate : string,\r\n }\r\n }\r\n}","import { attr, fk, Model, } from 'redux-orm'\n\n/**\n * PersonAgencyXref model\n */\nexport default class PersonAgencyXref extends Model {\n static get modelName () {\n return 'PersonAgencyXref'\n }\n\n static get options () {\n return {\n idAttribute: 'PersonAgencyXrefId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n PersonAgencyXrefId : attr(),\n PersonAgencyXrefAgencyId : fk({ to: 'Agency', relatedName: 'PersonAgencyXrefs', as: 'PersonAgencyXrefAgency', }),\n PersonAgencyXrefPersonId : fk({ to: 'Person', relatedName: 'PersonAgencyXrefs', as: 'PersonAgencyXrefPerson', }),\n ConfirmedBy : attr(),\n ConfirmedOn : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, fk, Model, } from 'redux-orm'\n\n/**\n * PersonAlertPreferenceXref model\n */\nexport default class PersonAlertPreferenceXref extends Model {\n static get modelName () {\n return 'PersonAlertPreferenceXref'\n }\n\n static get options () {\n return {\n idAttribute: 'PersonAlertPreferenceXrefId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n PersonAlertPreferenceXrefId : attr(),\n PersonId : fk({ to: 'Person', relatedName: 'PersonAlertPreferenceXrefs', as: 'PersonAlertPreferenceXrefPerson', }),\n AlertPreferenceId : fk({ to: 'AlertPreference', relatedName: 'PersonAlertPreferenceXrefs', as: 'PersonAlertPreferenceXrefAlertPreference', }),\n AlertMethodId : fk({ to: 'AlertMethod', relatedName: 'PersonAlertPreferenceXrefs', as: 'PersonAlertPreferenceXrefAlertMethod', }),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n }\n }\n}","import { attr, fk, Model, } from 'redux-orm'\n\nexport default class PersonRegionXref extends Model {\n static get modelName () {\n return 'PersonRegionXref'\n }\n\n toString () {\n return `${this.PersonRegionXrefId}`\n }\n}\n\nPersonRegionXref.options = {\n idAttribute: 'PersonRegionXrefId',\n}\n\nPersonRegionXref.fields = {\n // Common Properties\n PersonRegionXrefId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Model-Specific Properties\n RegionDefaultAssignee: attr(),\n \n // Relationships\n PersonRegionXrefRegionId: fk({ \n to : 'Region', \n as : 'PersonRegionXrefRegion', \n relatedName : 'PersonRegionXrefs', \n }),\n PersonRegionXrefPersonId: fk({ \n to : 'Person', \n as : 'PersonRegionXrefPerson', \n relatedName : 'PersonRegionXrefs', \n }),\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class PersonType extends Model {\n static get modelName () {\n return 'PersonType'\n }\n\n toString () {\n return `${this.PersonTypeName}`\n }\n\n static endpoint () {\n return 'PersonTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'PersonTypeId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n PersonTypeId : attr({ inputType: 'number', inputLabel: 'Person Type Id', }),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n PersonTypeName : attr(),\n PersonTypeDescription : attr(),\n\n // Relationships\n }\n }\n}","import { attr, Model, fk, } from 'redux-orm'\r\nimport * as Yup from 'yup'\r\n\r\nexport default class Phone extends Model {\r\n static get modelName () {\r\n return 'Phone'\r\n }\r\n\r\n toString () {\r\n // Remove non integer values\r\n let number = ('' + this.PhoneNumber).replace(/\\D/g, '')\r\n // Match the pieces of the phone number\r\n const match = number.match(/^(\\d{3})(\\d{3})(\\d{4})$/)\r\n // If it parsed successfully\r\n if (match) {\r\n // Format the phone number\r\n number = '(' + match[1] + ') ' + match[2] + '-' + match[3]\r\n }\r\n // append the extension is there is one\r\n if (this.PhoneExtension && this.PhoneExtension.length > 0) {\r\n number += ' x' + this.PhoneExtension\r\n }\r\n return number\r\n }\r\n\r\n static endpoint () {\r\n return 'Phones'\r\n }\r\n\r\n static getValidationSchema () {\r\n const {\r\n PhoneNumber,\r\n PhoneTypeId,\r\n } = this.fields\r\n\r\n return Yup.object().shape({\r\n PhoneNumber: Yup.number()\r\n .typeError('Phone number must be a number')\r\n .max(PhoneNumber.opts.max, `Phone number must be ${PhoneNumber.opts.max} characters or less`)\r\n .required('Please enter a phone number'),\r\n PhoneExtension: Yup.number()\r\n .nullable()\r\n .typeError('Extension must be a number'),\r\n PhoneTypeId: Yup.number()\r\n .min(PhoneTypeId.opts.min, 'Please select a phone type')\r\n .required('Please select a phone type'),\r\n ReceivesAlerts: Yup.bool(),\r\n })\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'PhoneId',\r\n }\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Common Properties\r\n PhoneId : attr(),\r\n CreateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateDate : attr(),\r\n UpdateBy : attr(),\r\n // Model-Specific Properties\r\n PhoneNumber : attr({ getDefault: () => '', max: 9999999999, }),\r\n PhoneExtension : attr(),\r\n PhoneNumberConfirmed : attr(),\r\n ReceivesAlerts : attr(),\r\n Active : attr({ getDefault: () => true, }),\r\n \r\n // Relationships\r\n PhoneTypeId: attr({\r\n getDefault : () => 1,\r\n min : 1, \r\n }),\r\n PhoneType: fk({ \r\n to : 'PhoneType', \r\n as : 'PhoneType', \r\n relatedName : 'Phones', \r\n }),\r\n\r\n // Reverse Fields\r\n // Agencies \r\n }\r\n }\r\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class PhoneType extends Model {\n static get modelName () {\n return 'PhoneType'\n }\n\n toString () {\n return `${this.PhoneTypeName}`\n }\n\n static endpoint () {\n return 'PhoneTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'PhoneTypeId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n PhoneTypeId : attr({ inputType: 'number', inputLabel: 'Phone Type Id', }),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n PhoneTypeName : attr(),\n PhoneTypeDescription : attr(),\n \n // Relationships\n }\n }\n}","import { attr, fk, Model, } from 'redux-orm'\nimport * as Yup from 'yup'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nexport default class PostBurn extends Model {\n static get modelName () {\n return 'PostBurn'\n }\n\n toString () {\n return `${this.BurnPermitNumber || this.BurnPermitId}`\n }\n\n static getValidationSchema (schemaType) {\n \n const { pileBurn = false, broadcastNaturalBurn = false, } = schemaType || {}\n\n let shapeObj = {}\n\n if (pileBurn === true) {\n shapeObj = {\n PilesIgnitedPercent: Yup.number()\n .typeError('Please enter the Piles Ignited percentage')\n .min(0, 'Piles Ignited must be 0.00% or greater')\n .required('Piles Ignited percentage is required'),\n }\n }\n if (broadcastNaturalBurn === true) {\n shapeObj = {\n ...shapeObj,\n BurnedBlackAcres: Yup.number().typeError('Please enter the Burn Black Acres or Percent')\n .test('burn-percent-or-acres-required',\n 'Only enter one value for either Area Burned Black (%) or Acres Burned Black',\n function (acres) {\n const { BurnedBlackPercent, } = this.parent\n if ((!BurnedBlackPercent && acres > -1) || (BurnedBlackPercent > -1 && !acres)) {\n return true\n }\n return false\n }),\n BurnedBlackPercent: Yup.number().typeError('Please enter the Burn Black Acres or Percent')\n .test('burn-acres-or-percent-required',\n 'Only enter one value for either Area Burned Black (%) or Acres Burned Black',\n function (percent) {\n const { BurnedBlackAcres, } = this.parent\n if ((!BurnedBlackAcres && percent > -1) || (BurnedBlackAcres > -1 && !percent)) {\n return true\n }\n return false\n }),\n BurnedBlackCanopyPercent: Yup.number().typeError('Please enter the Burned Black Canopy percent')\n .max(100, 'Burned Black Canopy Percentage must be 100.00% or less')\n .min(0, 'Burned Black Canopy Percentage must be 0.00% or greater')\n .required('Please enter the percentage of Canopy burned black'),\n BurnedBlackShrubPercent: Yup.number().typeError('Please enter the Burned Black Shrub percent')\n .min(0, 'Burned Black Shrub Percentage must be 0.00% or greater')\n .max(100, 'Burned Black Shrub Percentage must be 100.00% or less')\n .required('Please enter the percentage of Shrubs burned black'),\n FuelMoistureMethod : Yup.string().ensure(),\n WeatherCollectionMethod : Yup.string()\n .max(64, 'Weather Collection Method must be 64 characters or less'),\n WeatherStationName: Yup.string()\n .max(64, 'Weather Station Name must be 64 characters or less'),\n WindSpeedMph: Yup.number().typeError('Please enter the Wind Speed recorded at the time of ignition')\n .min(0, 'Wind Speed must be 0 or greater'),\n NumberDaysSinceRain: Yup.number().typeError('Please enter the Number of Days since rain')\n .min(0, 'Number of Days Since Rain must be zero or greater')\n .required('Please enter the Number of Days since rain'),\n TenHourFuelMoisturePercent: Yup.number().typeError('Please enter the Ten Hour Fuel Moisture percent')\n .min(0.00, '10-Hour Fuel Moisture Percentage must be 0.00% or greater')\n .max(100.00, '10-Hour Fuel Moisture Percentage must be 100.00% or less'),\n ThousandHourFuelMoisturePercent: Yup.number().typeError('Please enter the Thousand Hour Fuel Moisture percent')\n .min(0.00, '1,000-Hour Fuel Moisture Percentage must be 0.00% or greater')\n .max(100.00, '1,000-Hour Fuel Moisture Percentage must be 100.00% or less')\n .required('Please enter the Thousand Hour Fuel Moisture percent'),\n DuffFuelMoisturePercent: Yup.number().typeError('Please enter the Duff Fuel Moisture percent')\n .min(0.00, 'Duff Fuel Moisture Percentage must be 0.00% or greater')\n .max(100.00, 'Duff Fuel Moisture Percentage must be 100.00% or less'),\n MidflameWindSpeed: Yup.number().typeError('Please enter the Mid-Flame Wind Speed')\n .min(0, 'Mid-Flame Wind Speed must be 0 or greater'),\n }\n\n if (pileBurn) {\n shapeObj = {\n ...shapeObj,\n BurnedBlackPilePercent: Yup.number().typeError('Please enter the Burned Black Pile percent')\n .max(100, 'Burned Black Piles Percentage must be 100.00% or less')\n .min(0, 'Burned Black Piles Percentage must be 0.00% or greater')\n .required('Please enter the Burned Black Pile percent'),\n }\n }\n }\n\n shapeObj = {\n ...shapeObj,\n BurnDate: Yup.date()\n .required('Burn Date is required')\n .max(new Date(), 'Burn Date must be in the past'),\n IgnitionPeriod: Yup.number()\n .when('MultiDayBurnFlag', {\n is : flag => flag,\n then : Yup.number()\n .required('Ignition Period is required.')\n .min(0, 'Ignition Period must be zero or greater')\n .test(\n 'multi-day-ignition-period',\n 'Ignition Periods for multi day burns must be less than 2,880 min.',\n period => {\n return period < 2880\n }\n ),\n otherwise: Yup.number()\n .required('Ignition Period is required.')\n .min(0, 'Ignition Period must be zero or greater')\n .test(\n 'single-day-ignition-period',\n 'Ignition Periods for single day burns must be less than 780 min.',\n period => {\n return period < 780\n }\n ),\n }),\n BurnTime: Yup.number()\n .when('IgnitionPeriod', {\n is: (num) => {\n return num > 0\n },\n then: Yup.number()\n .test(\n 'between-0000-and-2359',\n 'Burn time must be in 24-hour time, between 0000 and 2359',\n (hoursMins) => {\n if (!hoursMins) {\n return false\n }\n return hoursMins > 0\n }\n )\n .required('Please enter a burn time'),\n }),\n ConsumedTons: Yup.number()\n .typeError('Consumed Tons must be a number')\n .positive('Consumed Tons must be positive')\n .min(0, 'Consumed Tons must be greater than zero'), \n PostBurnComments: Yup.string()\n .max(1000, 'Post-Burn Comments must be 1,000 characters or less'),\n DidNotBurnReason: Yup.string()\n .when('BurnDate', {\n is: (date) => {\n return !date\n }, \n then: Yup.string().max(100, 'Did Not Burn Reason must be 100 characters or less').required('Did Not Burn Reason is required if you are not burning.'),\n }),\n }\n\n return Yup.object().shape(shapeObj)\n }\n\n static endpoint (PostBurnId) {\n let endpoint = `${REACT_APP_SERVER_URL}PostBurnReports`\n if (PostBurnId) {\n endpoint += `/${PostBurnId}`\n }\n return endpoint\n }\n\n static get options () {\n return {\n idAttribute: 'PostBurnId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n PostBurnId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n PilesIgnitedPercent : attr(),\n BurnDate : attr(),\n BurnTime : attr(),\n IgnitionPeriod : attr(),\n ConsumedTons : attr(),\n BurnedBlackPercent : attr(),\n BurnedBlackAcres : attr(),\n BurnedBlackPilePercent : attr(),\n BurnedBlackCanopyPercent : attr(),\n BurnedBlackShrubPercent : attr(),\n FuelMoistureMethod : attr(),\n WeatherCollectionMethod : attr(),\n WeatherStationName : attr(),\n WindSpeedMph : attr(),\n NumberDaysSinceRain : attr(),\n TenHourFuelMoisturePercent : attr(),\n ThousandHourFuelMoisturePercent : attr(),\n DuffFuelMoisturePercent : attr(),\n MidflameWindSpeed : attr(),\n PostBurnComments : attr(),\n LegacyId : attr(),\n DidNotBurn : attr(),\n DidNotBurnReason : attr(),\n // Relationships\n BurnPermitId : fk({ to: 'BurnPermit', relatedName: 'PostBurns', as: 'BurnPermit', }),\n BurnRequestId : fk({ to: 'BurnRequest', relatedName: 'PostBurns', as: 'BurnRequest', }),\n // FuelMoistureMethodId : fk({ to: 'FuelMoistureMethod', relatedName: 'PostBurns', as: 'FuelMoistureMethod', }),\n }\n }\n}\n","import { attr, fk, Model, many, } from 'redux-orm'\n\nexport default class Region extends Model {\n static get modelName () {\n return 'Region'\n }\n\n toString () {\n return `${this.RegionId}`\n }\n\n static endpoint () {\n return 'Regions'\n }\n\n static get options () {\n return {\n idAttribute: 'RegionId',\n }\n }\n\n static get fields () {\n return {\n // Common Properties\n RegionId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n // Model-Specific Properties\n RegionCode : attr(),\n RegionName : attr(),\n RegionAbbreviation : attr(),\n RegionDescription : attr(),\n // Relationships\n RegionPhoneId : fk({ to: 'Phone', relatedName: 'Regions', as: 'RegionPhone', }),\n RegionAddressId : fk({ to: 'Address', relatedName: 'Regions', as: 'RegionAddress', }),\n RegionEmailId : fk({ to: 'Email', relatedName: 'Regions', as: 'RegionEmail', }),\n RegionCounties : many({ to: 'County', relatedName: 'Regions', }),\n }\n }\n}","import { attr, fk, Model, } from 'redux-orm'\n\nexport default class ReferenceDirection extends Model {\n static get modelName () {\n return 'ReferenceDirection'\n }\n\n static get options () {\n return {\n idAttribute: 'ReferenceDirectionId',\n }\n }\n\n static get fields () {\n return {\n ReferenceDirectionId : attr({ type: 'number', }),\n DistanceId : fk({ \n to : 'Distance', \n as : 'Distance', \n relatedName : 'ReferenceDistance',\n }),\n DirectionId: fk({ \n to : 'Direction', \n as : 'Direction', \n relatedName : 'ReferenceDirection',\n }),\n ReferenceDirectionTypeId: fk({ \n to : 'ReferenceDirectionType', \n as : 'ReferenceDirectionType', \n relatedName : 'ReferenceDirectionType',\n }),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\n\nexport default class ReferenceDirectionType extends Model {\n static get modelName () {\n return 'ReferenceDirectionType'\n }\n\n toString () {\n return `${this.ReferenceDirectionTypeName}`\n }\n\n static endpoint () {\n return 'ReferenceDirectionTypes'\n }\n\n static get options () {\n return {\n idAttribute: 'ReferenceDirectionTypeId',\n }\n }\n\n static get fields () {\n return {\n ReferenceDirectionTypeId : attr({ type: 'number', }),\n ReferenceDirectionTypeName : attr(),\n ReferenceDirectionTypeDescription : attr(),\n CreateDate : attr(),\n UpdateDate : attr(),\n }\n }\n}","import { attr, Model, } from 'redux-orm'\nimport * as Yup from 'yup'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\nconst ruleValueSchema = (type) => {\n let valueSchema = null\n switch (type) {\n case 'number':\n valueSchema = Yup.number('Value must be a number')\n .required('Value is required.')\n .typeError('Value must be a number')\n break\n case 'json-links':\n valueSchema = Yup.array().of(Yup.object().shape({\n href : Yup.string().required('A destination is required.'),\n text : Yup.string().required('Text is required.'),\n }))\n\n break\n default:\n valueSchema = Yup.string('Value is required')\n .ensure('Value is required')\n .required('Value is required')\n .min(1, 'Value is required')\n .max(8000, 'Value must be 8,000 characters or less')\n break\n }\n return valueSchema\n}\n\n\nexport default class Rule extends Model {\n static get modelName () {\n return 'Rule'\n }\n\n toString () {\n return `${this.RuleId}`\n }\n\n static endpoint () {\n return`${REACT_APP_SERVER_URL}Rules`\n }\n\n static validationSchema () {\n return Yup.object().shape({\n RuleDescription: Yup.string('Rule description is required')\n .required('Rule description is required')\n .min(1, 'Rule description is required')\n .max(128, 'Rule desciption must be 128 characters or less'),\n RuleValue: Yup.mixed().when('RuleType', ruleValueSchema),\n })\n }\n\n static arrayValidationSchema () {\n return Yup.array().of(this.validationSchema())\n }\n}\n\nRule.options = {\n idAttribute: 'RuleId',\n}\n\nRule.fields = {\n // Common Properties\n RuleId : attr(),\n CreateDate : attr(),\n CreateBy : attr(),\n UpdateDate : attr(),\n UpdateBy : attr(),\n\n // Model-Specific Properties\n RuleType : attr(),\n RuleName : attr(),\n RuleDescription : attr(),\n RuleEnabled : attr(),\n RuleValue : attr(),\n\n // Relationships\n}","import { attr, Model, } from 'redux-orm'\r\n\r\nexport default class SpeciesWoodDensity extends Model {\r\n static get modelName () {\r\n return 'SpeciesWoodDensity'\r\n }\r\n\r\n toString () {\r\n return `${this.CommonName} (${this.Density})`\r\n }\r\n\r\n static endpoint () {\r\n return 'SpeciesWoodDensities'\r\n }\r\n\r\n static get options () {\r\n return {\r\n idAttribute: 'SpeciesWoodDensityId',\r\n }\r\n }\r\n\r\n static get fields () {\r\n return {\r\n // Common Properties\r\n SpeciesWoodDensityId : attr(),\r\n TSN : attr(),\r\n ScientificName : attr(),\r\n CommonName : attr(),\r\n Density : attr(),\r\n CreateDate : attr(),\r\n CreateBy : attr(),\r\n UpdateDate : attr(),\r\n UpdateBy : attr(),\r\n }\r\n }\r\n}","import { ORM, } from 'redux-orm'\nimport Address from './Address'\nimport AddressType from './AddressType'\nimport Agency from './Agency'\nimport AlertPreference from './AlertPreference'\nimport AlertMethod from './AlertMethod'\nimport ApplicationUser from './ApplicationUser'\nimport ArrivalTime from './ArrivalTime'\nimport BurnIgnitionType from './BurnIgnitionType'\nimport BurnNoticeSubscriber from './BurnNoticeSubscriber'\nimport BurnPermit from './BurnPermit'\nimport BurnPermitApplicationStatus from './BurnPermitApplicationStatus'\nimport BurnPermitApplicationStatusXref from './BurnPermitApplicationStatusXref'\nimport BurnPermitArea from './BurnPermitArea'\nimport BurnPermitCondition from './BurnPermitCondition'\nimport BurnPermitConditionXref from './BurnPermitConditionXref'\nimport BurnPermitDocument from './BurnPermitDocument'\nimport BurnPermitDocumentType from './BurnPermitDocumentType'\nimport BurnPermitEquipmentConditionXref from './BurnPermitEquipmentConditionXref'\nimport BurnPermitReferenceDirectionXref from './BurnPermitReferenceDirectionXref'\nimport BurnPermitProhibitedDayConditionXref from './BurnPermitProhibitedDayConditionXref'\nimport BurnPermitWindDirectionConditionXref from './BurnPermitWindDirectionConditionXref'\nimport BurnPermitFuel from './BurnPermitFuel'\nimport BurnPermitFuelLoadingXref from './BurnPermitFuelLoadingXref'\nimport BurnPermitLocation from './BurnPermitLocation'\nimport BurnPermitOrder from './BurnPermitOrder'\nimport BurnPermitOrderXref from './BurnPermitOrderXref'\nimport BurnPermitPileGroup from './BurnPermitPileGroup'\nimport BurnPermitSearch from './BurnPermitSearch'\nimport BurnPermitSignature from './BurnPermitSignature'\nimport BurnPermitSite from './BurnPermitSite'\nimport BurnPermitSiteEquipmentXref from './BurnPermitSiteEquipmentXref'\nimport BurnPermitStatus from './BurnPermitStatus'\nimport BurnPermitStatusXref from './BurnPermitStatusXref'\nimport BurnPermitRequiredContactCondition from './BurnPermitRequiredContactCondition'\nimport BurnPermitUnit from './BurnPermitUnit'\nimport BurnReason from './BurnReason'\nimport BurnRequest from './BurnRequest'\nimport BurnRequestCancellationReason from './BurnRequestCancellationReason'\nimport BurnRequestSearch from './BurnRequestSearch'\nimport BurnRequestStatus from './BurnRequestStatus'\nimport BurnRequestStatusXref from './BurnRequestStatusXref'\nimport BurnType from './BurnType'\nimport ContactMethod from './ContactMethod'\nimport County from './County'\nimport CustomerInteraction from './CustomerInteraction'\nimport CustomerInteractionBurnPermitXref from './CustomerInteractionBurnPermitXref'\nimport CustomerInteractionDocument from './CustomerInteractionDocument'\nimport CustomerInteractionStatus from './CustomerInteractionStatus'\nimport CustomerInteractionStatusXref from './CustomerInteractionStatusXref'\nimport CustomerInteractionType from './CustomerInteractionType'\nimport DaysOfWeek from './DaysOfWeek'\nimport Direction from './Direction'\nimport Distance from './Distance'\nimport DuffType from './DuffType'\nimport Email from './Email'\nimport EquipmentType from './EquipmentType'\nimport FireDistrictDepartment from './FireDistrictDepartment'\nimport ForestHealthExempt from './ForestHealthExempt'\nimport ForestHealthProblemType from './ForestHealthProblemType'\nimport ForestHealthExemptProblemTypeXref from './ForestHealthExemptProblemTypeXref'\nimport ForestType from './ForestType'\nimport FuelDiameter from './FuelDiameter'\nimport LocationQuarter from './LocationQuarter'\nimport Person from './Person'\nimport PersonAgencyXref from './PersonAgencyXref'\nimport PersonAlertPreferenceXref from './PersonAlertPreferenceXref'\nimport PersonRegionXref from './PersonRegionXref'\nimport PersonType from './PersonType'\nimport Phone from './Phone'\nimport PhoneType from './PhoneType'\nimport PostBurn from './PostBurn'\nimport Region from './Region'\nimport ReferenceDirection from './ReferenceDirection'\nimport ReferenceDirectionType from './ReferenceDirectionType'\nimport Rule from './Rule'\nimport SpeciesWoodDensity from './SpeciesWoodDensity'\n\nconst orm = new ORM({\n stateSelector: state => state.orm,\n})\n\norm.register(\n Address,\n AddressType,\n Agency,\n AlertPreference,\n AlertMethod,\n ApplicationUser,\n ArrivalTime,\n BurnIgnitionType,\n BurnNoticeSubscriber,\n BurnPermit,\n BurnPermitApplicationStatus,\n BurnPermitApplicationStatusXref,\n BurnPermitArea,\n BurnPermitCondition,\n BurnPermitConditionXref,\n BurnPermitDocument,\n BurnPermitDocumentType,\n BurnPermitEquipmentConditionXref,\n BurnPermitProhibitedDayConditionXref,\n BurnPermitReferenceDirectionXref,\n BurnPermitRequiredContactCondition,\n BurnPermitWindDirectionConditionXref,\n BurnPermitFuel,\n BurnPermitFuelLoadingXref,\n BurnPermitLocation,\n BurnPermitOrder,\n BurnPermitOrderXref,\n BurnPermitPileGroup,\n BurnPermitSearch,\n BurnPermitSignature,\n BurnPermitSite,\n BurnPermitSiteEquipmentXref,\n BurnPermitStatus,\n BurnPermitStatusXref,\n BurnPermitUnit,\n BurnReason,\n BurnRequest,\n BurnRequestCancellationReason,\n BurnRequestSearch,\n BurnRequestStatus,\n BurnRequestStatusXref,\n BurnType,\n ContactMethod,\n County,\n CustomerInteraction,\n CustomerInteractionBurnPermitXref,\n CustomerInteractionDocument,\n CustomerInteractionStatus,\n CustomerInteractionStatusXref,\n CustomerInteractionType,\n DaysOfWeek,\n Direction,\n Distance,\n DuffType,\n Email,\n EquipmentType,\n FireDistrictDepartment,\n ForestHealthExempt,\n ForestHealthProblemType,\n ForestHealthExemptProblemTypeXref,\n ForestType,\n FuelDiameter,\n LocationQuarter,\n Person,\n PersonType,\n PersonAgencyXref,\n PersonAlertPreferenceXref,\n PersonRegionXref,\n Phone,\n PhoneType,\n PostBurn,\n Region,\n ReferenceDirection,\n ReferenceDirectionType,\n Rule,\n SpeciesWoodDensity,\n)\n\nexport default orm\n","import { createReducer, createActions, } from 'reduxsauce'\r\nimport orm from '../models/index'\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\n\r\nconst { Types, Creators, } = createActions({\r\n upsert : [ 'modelName', 'properties', ],\r\n upsertRange : [ 'modelName', 'records', ],\r\n destroy : [ 'modelName', 'modelId', ],\r\n destroyRange : [ 'modelName', 'modelIdArray', ],\r\n destroyAll : [ 'modelName', 'filterObj', ],\r\n insert : [ 'modelName', 'properties', ],\r\n replaceAll : [ 'modelName', 'objects', 'filterObj', ],\r\n update : [ 'modelName', 'modelId', 'updateObj', ],\r\n})\r\n\r\nexport const OrmTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nexport const INITIAL_STATE = { }\r\n\r\n/* ------------- Reducers ------------- */\r\n\r\nexport const insert = (state, { modelName, properties, }) => {\r\n const session = orm.session(state)\r\n\r\n const ormModel = session[modelName]\r\n\r\n ormModel.create(properties)\r\n\r\n return session.state\r\n}\r\n\r\nexport const update = (state, { modelName, modelId, updateObj, }) => {\r\n const session = orm.session(state)\r\n const ormModel = session[modelName]\r\n if (!ormModel) {\r\n return state\r\n }\r\n const entity = ormModel.withId(modelId)\r\n if (!entity) {\r\n return state\r\n }\r\n entity.update(updateObj)\r\n return session.state\r\n}\r\n\r\n\r\nexport const upsert = (state, { modelName, properties, }) => {\r\n const session = orm.session(state)\r\n \r\n const ormModel = session[modelName]\r\n \r\n ormModel.upsert(properties)\r\n\r\n return session.state\r\n}\r\n\r\n/**\r\n * This function will map the key/values from `data` to the properties declared in `model`\r\n * @param {Model} model - The Redux-ORM model to map data to\r\n * @param {object} data - An object of key/values to map data to the ORM model\r\n * @param {boolean} basePropsOnly - A flag to prevent/allow mapping of relationship models.\r\n * Only set this if you are providing EXACTLY that data that should be written to the related table.\r\n * The ORM will overwrite any and all existing model data if a model with the same ID exists.\r\n */\r\nexport const mapDataToModel = (model, data, basePropsOnly = true) => {\r\n // Get the property/field names of the target model\r\n let modelFields = Object.keys(model.fields)\r\n if (basePropsOnly === true) {\r\n modelFields = modelFields.filter(f => model.fields[f].constructor.name !== 'ForeignKey')\r\n }\r\n // Get the property/field names of the data object provided\r\n // and filter them to only those that match those that are in\r\n // the target model\r\n // Then map the filtered property/field names\r\n const matchingDataFields = Object.keys(data).filter(d => modelFields.includes(d))\r\n // Start a new object to put the matching key/values\r\n const mappedData = {}\r\n // Loop the matching data fields and update the mapped data object\r\n for (let k = 0, kLen = matchingDataFields.length; k < kLen; k++) {\r\n const key = matchingDataFields[k]\r\n const value = data[key]\r\n mappedData[key] = value\r\n }\r\n // Return the mapped data\r\n return mappedData\r\n}\r\n\r\n/**\r\n * Reduce state changes by updating the ORM in one go\r\n * by passing an array of the records to update instead\r\n * of calling for an upsert state change within a loop\r\n */\r\nexport const upsertRange = (state, { modelName, records, }) => {\r\n const session = orm.session(state)\r\n\r\n const ormModel = session[modelName]\r\n\r\n for (let r = 0, rLen = records.length; r < rLen; r++) {\r\n const properties = records[r]\r\n ormModel.upsert(properties)\r\n }\r\n\r\n return session.state\r\n}\r\n\r\nexport const destroy = (state, { modelName, modelId, }) => {\r\n const session = orm.session(state)\r\n\r\n const ormModel = session[modelName]\r\n\r\n const modelInstance = ormModel.withId(modelId)\r\n\r\n if (modelInstance && typeof modelInstance.delete === 'function') {\r\n modelInstance.delete()\r\n }\r\n\r\n return session.state\r\n}\r\n\r\nexport const destroyRange = (state, { modelName, modelIdArray, }) => {\r\n if (!Array.isArray(modelIdArray)) {\r\n return state\r\n }\r\n const session = orm.session(state)\r\n const ormModel = session[modelName]\r\n const idAttr = ormModel.idAttribute\r\n const dataToDelete = ormModel.filter(d => modelIdArray.includes(d[idAttr]))\r\n dataToDelete.delete()\r\n return session.state\r\n}\r\n\r\nexport const destroyAll = (state, { modelName, filterObj, }) => {\r\n const session = orm.session(state)\r\n\r\n const targetModel = session[modelName]\r\n \r\n if (!targetModel) {\r\n return state\r\n }\r\n\r\n try {\r\n let targetData\r\n if (typeof filterObj === 'object' || typeof filterObj === 'function') {\r\n targetData = targetModel.filter(filterObj).all()\r\n }\r\n else {\r\n targetData = targetModel.all()\r\n }\r\n if (targetData.exists()) {\r\n targetData.delete()\r\n }\r\n }\r\n catch (e) {\r\n console.error(e)\r\n }\r\n\r\n return session.state\r\n}\r\n\r\n/**\r\n * Single action to clear local store for the given model name and write\r\n * in the objects provided\r\n */\r\nexport const replaceAll = (state, { modelName, objects, filterObj, }) => {\r\n const session = orm.session(state)\r\n\r\n const targetModel = session[modelName]\r\n \r\n if (!targetModel) {\r\n return state\r\n }\r\n\r\n try {\r\n let targetData\r\n if (typeof filterObj === 'object' || typeof filterObj === 'function') {\r\n targetData = targetModel.filter(filterObj).all()\r\n }\r\n else {\r\n targetData = targetModel.all()\r\n }\r\n if (targetData.exists()) {\r\n targetData.delete()\r\n }\r\n\r\n if (Array.isArray(objects)) {\r\n for (let r = 0, rLen = objects.length; r < rLen; r++) {\r\n const properties = objects[r]\r\n targetModel.create(properties)\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e)\r\n }\r\n\r\n return session.state\r\n}\r\n\r\nexport const apiGetSuccess = (state, { modelName, payload, }) => {\r\n const session = orm.session(state)\r\n \r\n const ormModel = session[modelName]\r\n\r\n ormModel.create(payload)\r\n \r\n return session.state\r\n}\r\n\r\n\r\nexport const apiUpdateSuccess = (state, { modelName, payload, }) => {\r\n const session = orm.session(state)\r\n\r\n // Not all PUT responses will contain a payload, so only update locally if they do\r\n if (payload) {\r\n const ormModel = session[modelName]\r\n\r\n const targetId = payload[ormModel.idAttribute]\r\n\r\n try {\r\n\r\n let sessionItem = ormModel.withId(targetId)\r\n if (sessionItem) {\r\n sessionItem.update(payload)\r\n }\r\n else {\r\n sessionItem = ormModel.create(payload)\r\n }\r\n }\r\n catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n \r\n return session.state\r\n}\r\n\r\nexport const apiDeleteSuccess = (state, { modelName, modelId, }) => {\r\n const session = orm.session(state)\r\n\r\n const ormModel = session[modelName]\r\n\r\n try {\r\n\r\n let sessionItem = ormModel.withId(modelId)\r\n if (sessionItem) {\r\n sessionItem.delete()\r\n }\r\n }\r\n catch (e) {\r\n console.error(e)\r\n }\r\n \r\n return session.state\r\n}\r\n\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(orm.getEmptyState(), {\r\n [Types.INSERT] : insert,\r\n [Types.UPSERT] : upsert,\r\n [Types.UPSERT_RANGE] : upsertRange,\r\n [Types.DESTROY] : destroy,\r\n [Types.DESTROY_RANGE] : destroyRange,\r\n [Types.DESTROY_ALL] : destroyAll,\r\n [Types.REPLACE_ALL] : replaceAll,\r\n [Types.UPDATE] : update,\r\n})","import {\r\n createReducer,\r\n createActions,\r\n} from 'reduxsauce'\r\n \r\n/* ------------- Types and Action Creators ------------- */\r\n\r\nconst { Types, Creators, } = createActions({\r\n updateAppVersion : [ 'version', ],\r\n setPageTitle : [ 'pageTitle', ],\r\n showLoading : null,\r\n hideLoading : null,\r\n showSuccess : null,\r\n hideSuccess : null,\r\n logLastRoute : [ 'lastRoute', 'title', ],\r\n setReturnUrl : [ 'returnUrl', ],\r\n setHistoryLength : [ 'newLength', ],\r\n redirectTo : [ 'route', ],\r\n})\r\n\r\nexport const AppTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nexport const INITIAL_STATE = {\r\n version : '0.0.0',\r\n pageTitle : '',\r\n showLoading : false,\r\n showSuccess : false,\r\n routeHistory : [],\r\n returnUrl : '',\r\n routeHistoryLength : 5,\r\n redirectToRoute : '',\r\n}\r\n \r\n/* ------------- Reducers ------------- */\r\n\r\nexport const updateAppVersion = (state, { version, }) => {\r\n const newState = { ...state, }\r\n newState.version = version || 'Burn Portal'\r\n return newState\r\n}\r\n\r\nexport const setPageTitle = (state, { pageTitle, }) => {\r\n const newState = { ...state, }\r\n newState.pageTitle = pageTitle\r\n return newState\r\n}\r\n\r\nexport const setReturnUrl = (state, { returnUrl, }) => {\r\n const newState = { ...state, }\r\n newState.returnUrl = returnUrl\r\n return newState\r\n}\r\n\r\nexport const showLoading = (state) => {\r\n const newState = { ...state, }\r\n newState.showLoading = true\r\n return newState\r\n}\r\n\r\nexport const hideLoading = (state) => {\r\n const newState = { ...state, }\r\n newState.showLoading = false\r\n return newState\r\n}\r\n\r\nexport const showSuccess = (state) => {\r\n const newState = { ...state, }\r\n newState.showSuccess = true\r\n return newState\r\n}\r\n\r\nexport const hideSuccess = (state) => {\r\n const newState = { ...state, }\r\n newState.showSuccess = false\r\n return newState\r\n}\r\n\r\nexport const logLastRoute = (state, { lastRoute, title, }) => {\r\n const newState = { ...state, }\r\n newState.showLoading = true\r\n newState.routeHistoryLength = state.routeHistoryLength || INITIAL_STATE.routeHistoryLength\r\n newState.routeHistory = [ { route: lastRoute, title, }, ...state.routeHistory.slice(0, newState.routeHistoryLength - 1), ]\r\n return newState\r\n}\r\n\r\nexport const setHistoryLength = (state, { newLength, }) => {\r\n if (isNaN(newLength)){\r\n return state\r\n }\r\n const newState = { ...state, }\r\n newState.routeHistoryLength = newLength\r\n newState.routeHistory = [ ...state.routeHistory.slice(-1 * newLength), ]\r\n return newState\r\n}\r\n\r\n// This is used by sagas to redirect to a url\r\nexport const redirectTo = (state, { route, }) => {\r\n const newState = { ...state, }\r\n newState.redirectToRoute = route || ''\r\n return newState\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.UPDATE_APP_VERSION] : updateAppVersion,\r\n [Types.SET_PAGE_TITLE] : setPageTitle,\r\n [Types.SHOW_LOADING] : showLoading,\r\n [Types.HIDE_LOADING] : hideLoading,\r\n [Types.SHOW_SUCCESS] : showSuccess,\r\n [Types.HIDE_SUCCESS] : hideSuccess,\r\n [Types.LOG_LAST_ROUTE] : logLastRoute,\r\n [Types.SET_RETURN_URL] : setReturnUrl,\r\n [Types.SET_HISTORY_LENGTH] : setHistoryLength,\r\n [Types.REDIRECT_TO] : redirectTo,\r\n})","export const PRIMARY_BLUE = [ 0, 61, 107, ]\nexport const DARK_BLUE = [ 23, 37, 69, ]\nexport const DARK_PURPLE = [ 54, 37, 144, ]\nexport const PRIMARY_ORANGE = [ 153, 96, 7, ]\nexport const GRAY = [ 128, 128, 128, ]\nexport const RED = [ 153, 0, 0, ]\nexport const GREEN = [ 19, 99, 49, ]","import { RED, GRAY, PRIMARY_BLUE, PRIMARY_ORANGE, GREEN, } from './colors'\r\n\r\nexport const POLYGON_SYMBOL = {\r\n type : 'simple-fill',\r\n color : [ ...PRIMARY_BLUE, 0.25, ],\r\n style : 'solid',\r\n outline : {\r\n color : [ ...PRIMARY_BLUE, ],\r\n width : 1,\r\n },\r\n}\r\n\r\nexport const POINT_SYMBOL = {\r\n type : 'simple-marker',\r\n style : 'circle',\r\n size : 8,\r\n color : [ ...PRIMARY_ORANGE, ],\r\n outline : {\r\n color : [ ...PRIMARY_BLUE, ],\r\n width : .5,\r\n },\r\n}\r\n\r\nexport const POLYLINE_SYMBOL = {\r\n type : 'simple-line',\r\n color : [ ...PRIMARY_BLUE, ],\r\n width : 2,\r\n}\r\n\r\nexport const DOCUMENTATION_SYMBOL = {\r\n type : 'text',\r\n text : '\\ue64b',\r\n haloColor : '#fff',\r\n haloSize : 1,\r\n font : {\r\n family : 'CalciteWebCoreIcons',\r\n size : 14,\r\n },\r\n}\r\n\r\nexport const SUBMITTED_SYMBOL = {\r\n ...DOCUMENTATION_SYMBOL,\r\n color: PRIMARY_ORANGE,\r\n}\r\n\r\nexport const INFO_REQUIRED_SYMBOL = {\r\n ...DOCUMENTATION_SYMBOL,\r\n color: PRIMARY_BLUE,\r\n}\r\n\r\nexport const UNDER_REVIEW_SYMBOL = {\r\n ...DOCUMENTATION_SYMBOL,\r\n}\r\n\r\nexport const DENIED_SYMBOL = {\r\n ...DOCUMENTATION_SYMBOL,\r\n color: [ ...RED, ],\r\n}\r\n\r\nexport const APPROVED_SYMBOL = {\r\n ...DOCUMENTATION_SYMBOL,\r\n color: GREEN,\r\n}\r\n\r\nexport const ISSUED_SYMBOL = {\r\n ...DOCUMENTATION_SYMBOL,\r\n color: PRIMARY_BLUE,\r\n}\r\n\r\nexport const SUSPENDED_SYMBOL = {\r\n ...DOCUMENTATION_SYMBOL,\r\n color: GRAY,\r\n}\r\n\r\nexport const GetPermitSymbolByStatus = (status, IsUGA) => {\r\n let symbol\r\n switch (status) {\r\n case 'Submitted':\r\n symbol = { ...SUBMITTED_SYMBOL, }\r\n break\r\n case 'Under Review':\r\n symbol = { ...UNDER_REVIEW_SYMBOL, }\r\n break\r\n case 'Denied':\r\n case 'Revoked':\r\n symbol = { ...DENIED_SYMBOL, }\r\n break\r\n case 'Info Required':\r\n symbol = { ...INFO_REQUIRED_SYMBOL, }\r\n break\r\n case 'Approved':\r\n symbol = { ...APPROVED_SYMBOL, }\r\n break\r\n case 'Extended':\r\n case 'Issued':\r\n symbol = { ...ISSUED_SYMBOL, }\r\n break\r\n case 'Suspended':\r\n symbol = { ...SUSPENDED_SYMBOL, }\r\n break\r\n case 'Pending':\r\n case 'Expired':\r\n default:\r\n symbol = { ...DOCUMENTATION_SYMBOL, }\r\n }\r\n if (IsUGA) {\r\n symbol.text = IN_UGA_SYMBOL.text\r\n }\r\n return symbol\r\n}\r\n\r\n\r\n\r\nexport const PIN_SYMBOL = {\r\n type : 'text',\r\n text : '\\ue61d',\r\n font : {\r\n family : 'CalciteWebCoreIcons',\r\n size : 14,\r\n },\r\n}\r\n\r\nexport const REQUEST_SUBMITTED_SYMBOL = {\r\n ...PIN_SYMBOL,\r\n color: PRIMARY_BLUE,\r\n}\r\n\r\nexport const REQUEST_UNDER_REVIEW_SYMBOL = {\r\n ...PIN_SYMBOL,\r\n color: PRIMARY_BLUE,\r\n}\r\n\r\nexport const REQUEST_INFO_REQUIRED_SYMBOL = {\r\n ...PIN_SYMBOL,\r\n color: PRIMARY_ORANGE,\r\n}\r\n\r\nexport const REQUEST_DENIED_SYMBOL = {\r\n ...PIN_SYMBOL,\r\n color: RED,\r\n}\r\n\r\nexport const REQUEST_APPROVED_SYMBOL = {\r\n ...PIN_SYMBOL,\r\n color: GREEN,\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nexport const GetRequestSymbolByStatus = (status, IsUGA) => {\r\n let symbol\r\n switch (status) {\r\n case 'Submitted':\r\n symbol = { ...REQUEST_SUBMITTED_SYMBOL, }\r\n break\r\n case 'Under Review':\r\n symbol = { ...REQUEST_UNDER_REVIEW_SYMBOL, }\r\n break\r\n case 'Info Required':\r\n symbol = { ...REQUEST_INFO_REQUIRED_SYMBOL, }\r\n break\r\n case 'Denied':\r\n symbol = { ...REQUEST_DENIED_SYMBOL, }\r\n break\r\n case 'Approved':\r\n symbol = { ...REQUEST_APPROVED_SYMBOL, }\r\n break\r\n case 'Cancelled':\r\n default:\r\n symbol = { ...PIN_SYMBOL, }\r\n }\r\n if (IsUGA) {\r\n symbol.text = IN_UGA_SYMBOL.text\r\n }\r\n return symbol\r\n}\r\n\r\nexport const POST_BURN_SYMBOL = {\r\n ...PIN_SYMBOL,\r\n color: PRIMARY_ORANGE,\r\n}\r\n\r\nexport const IN_UGA_SYMBOL = {\r\n ...PIN_SYMBOL,\r\n text : '\\ue687', //esri-icon-organization\r\n color : '#000000',\r\n haloSize : '3px',\r\n font : {\r\n family : 'CalciteWebCoreIcons',\r\n size : 16,\r\n weight : 'lighter',\r\n },\r\n}","import { cloneDeep, } from 'lodash'\r\nimport {\r\n POLYGON_SYMBOL,\r\n DOCUMENTATION_SYMBOL,\r\n UNDER_REVIEW_SYMBOL,\r\n DENIED_SYMBOL,\r\n APPROVED_SYMBOL,\r\n ISSUED_SYMBOL,\r\n SUBMITTED_SYMBOL,\r\n INFO_REQUIRED_SYMBOL,\r\n SUSPENDED_SYMBOL,\r\n REQUEST_APPROVED_SYMBOL,\r\n REQUEST_SUBMITTED_SYMBOL,\r\n REQUEST_UNDER_REVIEW_SYMBOL,\r\n REQUEST_INFO_REQUIRED_SYMBOL,\r\n REQUEST_DENIED_SYMBOL,\r\n PIN_SYMBOL,\r\n POST_BURN_SYMBOL,\r\n IN_UGA_SYMBOL,\r\n} from './symbols'\r\nimport {\r\n PRIMARY_ORANGE,\r\n PRIMARY_BLUE,\r\n GREEN,\r\n DARK_BLUE,\r\n DARK_PURPLE,\r\n GRAY,\r\n} from './colors'\r\n\r\n\r\nexport const BURN_PERMIT_STATUS_POINT = {\r\n type : 'unique-value', // autocasts as new UniqueValueRenderer()\r\n field : 'BurnPermitStatus',\r\n defaultSymbol : DOCUMENTATION_SYMBOL,\r\n uniqueValueInfos : [\r\n {\r\n value : 'Issued',\r\n symbol : ISSUED_SYMBOL,\r\n },\r\n {\r\n value : 'Approved',\r\n symbol : APPROVED_SYMBOL,\r\n },\r\n {\r\n value : 'Pending',\r\n symbol : DOCUMENTATION_SYMBOL,\r\n },\r\n {\r\n value : 'Submitted',\r\n symbol : SUBMITTED_SYMBOL,\r\n },\r\n {\r\n value : 'Under Review',\r\n symbol : UNDER_REVIEW_SYMBOL,\r\n },\r\n {\r\n value : 'Info Required',\r\n symbol : INFO_REQUIRED_SYMBOL,\r\n },\r\n {\r\n value : 'Denied',\r\n symbol : DENIED_SYMBOL,\r\n },\r\n {\r\n value : 'Suspended',\r\n symbol : SUSPENDED_SYMBOL,\r\n },\r\n {\r\n value : 'Revoked',\r\n symbol : DENIED_SYMBOL,\r\n },\r\n ],\r\n}\r\n\r\nexport const BURN_REQUEST_STATUS_POINT = {\r\n type : 'unique-value', // autocasts as new UniqueValueRenderer()\r\n field : 'BurnRequestStatus',\r\n defaultSymbol : PIN_SYMBOL,\r\n uniqueValueInfos : [\r\n {\r\n value : 'Approved',\r\n symbol : REQUEST_APPROVED_SYMBOL,\r\n },\r\n {\r\n value : 'Submitted',\r\n symbol : REQUEST_SUBMITTED_SYMBOL,\r\n },\r\n {\r\n value : 'Under Review',\r\n symbol : REQUEST_UNDER_REVIEW_SYMBOL,\r\n },\r\n {\r\n value : 'Info Required',\r\n symbol : REQUEST_INFO_REQUIRED_SYMBOL,\r\n },\r\n {\r\n value : 'Denied',\r\n symbol : REQUEST_DENIED_SYMBOL,\r\n },\r\n {\r\n value : 'Cancelled',\r\n symbol : PIN_SYMBOL,\r\n },\r\n ],\r\n visualVariables: [ {\r\n type : 'size',\r\n field : 'TotalProposedBurnQuantity',\r\n stops : [\r\n { value: 100, size: 10, label: 'Less than 100 tons', },\r\n { value: 500, size: 20, label: '500 tons', },\r\n { value: 1000, size: 30, label: '1,000 tons', },\r\n { value: 5000, size: 40, label: 'Greater than 5,000 tons', },\r\n ],\r\n }, ],\r\n}\r\n\r\nexport const UGA_BURN_REQUEST_STATUS_POINT = {\r\n type : 'unique-value', // autocasts as new UniqueValueRenderer()\r\n field : 'BurnRequestStatus',\r\n defaultSymbol : { ...IN_UGA_SYMBOL, },\r\n uniqueValueInfos : [ ...BURN_PERMIT_STATUS_POINT.uniqueValueInfos, ]\r\n .map(i => {\r\n let { color, } = i.symbol\r\n if (!Array.isArray(color)) {\r\n color = [ ...GRAY, ]\r\n }\r\n let newInfo = {\r\n value : i.value,\r\n symbol : {\r\n ...i.symbol,\r\n haloColor : [ 255, 255, 255, 0.5, ],\r\n color : [ ...color, ],\r\n haloSize : IN_UGA_SYMBOL.haloSize,\r\n text : IN_UGA_SYMBOL.text,\r\n },\r\n }\r\n newInfo.symbol.font.weight = IN_UGA_SYMBOL.font.weight\r\n return newInfo\r\n }),\r\n visualVariables: [ {\r\n type : 'size',\r\n field : 'TotalProposedBurnQuantity',\r\n stops : [\r\n { value: 100, size: 16, label: 'Less than 100 tons', },\r\n { value: 500, size: 23, label: '500 tons', },\r\n { value: 1000, size: 30, label: '1,000 tons', },\r\n { value: 5000, size: 40, label: 'Greater than 5,000 tons', },\r\n ],\r\n }, ],\r\n}\r\n\r\nexport const POST_BURN_POINT = {\r\n type : 'unique-value', // autocasts as new UniqueValueRenderer()\r\n field : 'BurnRequestStatus',\r\n defaultSymbol : POST_BURN_SYMBOL,\r\n visualVariables : [ {\r\n type : 'size',\r\n field : 'ConsumedTons',\r\n stops : [\r\n { value: 100, size: 10, label: 'Less than 100 tons', },\r\n { value: 500, size: 20, label: '500 tons', },\r\n { value: 1000, size: 30, label: '1,000 tons', },\r\n { value: 5000, size: 40, label: 'Greater than 5,000 tons', },\r\n ],\r\n }, ],\r\n}\r\n\r\nexport const UGA_POST_BURN_POINT = {\r\n ...POST_BURN_POINT,\r\n defaultSymbol: { ...IN_UGA_SYMBOL, },\r\n}\r\n\r\nexport const SIMPLE_ORANGE_POLYGON = {\r\n type : 'simple',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ ...PRIMARY_ORANGE, 0.05, ],\r\n outline : {\r\n width : 0.5,\r\n color : [ ...PRIMARY_BLUE, ],\r\n },\r\n }),\r\n}\r\n\r\nexport const SIMPLE_BLUE_POLYGON = {\r\n type : 'simple',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ ...PRIMARY_BLUE, 0.05, ],\r\n outline : {\r\n width : 0.5,\r\n color : [ ...PRIMARY_ORANGE, ],\r\n },\r\n }),\r\n}\r\n\r\nexport const SIMPLE_GREEN_POLYGON = {\r\n type : 'simple',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ ...GREEN, 0.05, ],\r\n outline : {\r\n width : 0.5,\r\n color : [ ...GREEN, ],\r\n },\r\n }),\r\n}\r\n\r\nexport const SIMPLE_DARK_BLUE_POLYGON = {\r\n type : 'simple',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ ...DARK_BLUE, 0.05, ],\r\n outline : {\r\n width : 0.5,\r\n color : [ ...DARK_BLUE, ],\r\n },\r\n }),\r\n}\r\n\r\nexport const SIMPLE_DARK_PURPLE_POLYGON = {\r\n type : 'simple',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ ...DARK_PURPLE, 0.05, ],\r\n outline : {\r\n width : 1.5,\r\n color : [ ...DARK_PURPLE, ],\r\n },\r\n }),\r\n}\r\n\r\nconst FIRE_DANGER_OPACITY = 0.25\r\nconst FIRE_DANGER_OUTLINE = {\r\n width : 0.5,\r\n color : [ ...GRAY, ],\r\n}\r\nexport const FIRE_DANGER_RENDERER = {\r\n type : 'unique-value', // autocasts as new UniqueValueRenderer()\r\n field : 'FIRE_DANGER_LEVEL_CD',\r\n defaultSymbol : SIMPLE_BLUE_POLYGON.symbol,\r\n uniqueValueInfos : [\r\n {\r\n value : 1,\r\n label : 'Low',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ ...GREEN, FIRE_DANGER_OPACITY, ],\r\n outline : FIRE_DANGER_OUTLINE,\r\n }),\r\n },\r\n {\r\n value : 2,\r\n label : 'Moderate',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ ...PRIMARY_BLUE, FIRE_DANGER_OPACITY, ],\r\n outline : FIRE_DANGER_OUTLINE,\r\n }),\r\n },\r\n {\r\n value : 3,\r\n label : 'High',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ 255, 243, 0, FIRE_DANGER_OPACITY, ],\r\n outline : FIRE_DANGER_OUTLINE,\r\n }),\r\n },\r\n {\r\n value : 4,\r\n label : 'Very High',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ 230, 152, 0, FIRE_DANGER_OPACITY, ],\r\n outline : FIRE_DANGER_OUTLINE,\r\n }),\r\n },\r\n {\r\n value : 5,\r\n label : 'Extreme',\r\n symbol : Object.assign(cloneDeep(POLYGON_SYMBOL), {\r\n color : [ 255, 0, 0, FIRE_DANGER_OPACITY, ],\r\n outline : FIRE_DANGER_OUTLINE,\r\n }),\r\n },\r\n ],\r\n}","import {\n SIMPLE_ORANGE_POLYGON,\n SIMPLE_BLUE_POLYGON,\n SIMPLE_GREEN_POLYGON,\n SIMPLE_DARK_BLUE_POLYGON,\n SIMPLE_DARK_PURPLE_POLYGON,\n FIRE_DANGER_RENDERER,\n} from './renderers'\n\nconst {\n REACT_APP_WAMAS_GIS_SERVICES,\n REACT_APP_DNR_GIS_SERVICES,\n // eslint-disable-next-line no-undef\n} = process.env\n\nexport const COUNTIES_SERVICE_URL = `${REACT_APP_WAMAS_GIS_SERVICES}MapServices/LocationFinder_GPservice/MapServer/3`\nexport const COUNTIES = {\n url : COUNTIES_SERVICE_URL,\n id : 'Counties',\n title : 'Counties',\n outFields : [ '*', ],\n visible : false,\n renderer : SIMPLE_ORANGE_POLYGON,\n labelingInfo : {\n labelExpressionInfo : { expression: '$feature.COUNTY_NM', },\n symbol : {\n type : 'text',\n color : 'black',\n haloSize : 1,\n haloColor : 'white',\n },\n },\n popupTemplate: {\n title : '{COUNTY_NM} County',\n content : [ {\n type : 'fields',\n fieldInfos : [\n { fieldName: 'ECY_REGION', label: 'ECY Region', },\n { fieldName: 'COUNTY_FIP', label: 'County FIP', },\n { fieldName: 'AIR_REGION', label: 'Air Region', },\n ],\n }, ],\n },\n}\n\nexport const TRS_SERVICE_URL = `${REACT_APP_WAMAS_GIS_SERVICES}MapServices/LocationFinder_GPservice/MapServer/7`\nexport const TRS = {\n url : TRS_SERVICE_URL,\n id : 'TRS',\n title : 'Township Range Sections',\n outFields : [ '*', ],\n visible : false,\n renderer : SIMPLE_ORANGE_POLYGON,\n labelingInfo : {\n labelExpressionInfo : { expression: '$feature.TRS_CD', },\n symbol : {\n type : 'text',\n color : 'black',\n haloSize : 1,\n haloColor : 'white',\n },\n },\n popupTemplate: {\n title : 'TRS {TRS_CD}',\n content : [ {\n type : 'fields',\n fieldInfos : [\n { fieldName: 'TOWNSHIP_NR', label: 'Township #', },\n { fieldName: 'TOWNSHIP_FRA_CD', label: 'Township Fraction', },\n { fieldName: 'TOWNSHIP_DIR_CD', label: 'Township Direction', },\n { fieldName: 'RANGE_NR', label: 'Range #', },\n { fieldName: 'RANGE_FRA_CD', label: 'Range Fraction', },\n { fieldName: 'RANGE_DIR_CD', label: 'Range Direction', },\n { fieldName: 'SECTION_NR', label: 'Section #', },\n { fieldName: 'SECTION_FRA_CD', label: 'Section Fraction', },\n { fieldName: 'SECTION_DIR_CD', label: 'Section Direction', },\n ],\n }, ],\n },\n}\n\nexport const REGIONS_SERVICE_URL = `${REACT_APP_DNR_GIS_SERVICES}Public_Boundaries/WADNR_PUBLIC_Cadastre_Jurisdiction/MapServer/0`\nexport const REGIONS = {\n url : REGIONS_SERVICE_URL,\n id : 'Regions',\n title : 'Regions',\n outFields : [ '*', ],\n visible : false,\n renderer : SIMPLE_BLUE_POLYGON,\n labelingInfo : {\n labelExpressionInfo : { expression: '$feature.JURISDICT_LABEL_NM', },\n symbol : {\n type : 'text',\n color : 'black',\n haloSize : 1,\n haloColor : 'white',\n },\n },\n popupTemplate: {\n title: '{JURISDICT_LABEL_NM} Region',\n },\n}\n\nexport const FIRE_DISTRICTS_SERVICE_URL = `${REACT_APP_DNR_GIS_SERVICES}Public_Wildfire/WADNR_PUBLIC_WD_WildFire_Data/MapServer/6`\nexport const FIRE_DISTRICTS = {\n url : FIRE_DISTRICTS_SERVICE_URL,\n id : 'FireDistricts',\n title : 'Fire Districts',\n outFields : [ '*', ],\n visible : false,\n renderer : SIMPLE_GREEN_POLYGON,\n labelingInfo : {\n labelExpressionInfo : { expression: '$feature.FPD_DESC', },\n symbol : {\n type : 'text',\n color : 'black',\n haloSize : 1,\n haloColor : 'white',\n },\n },\n popupTemplate: {\n title : 'Fire District',\n content : [ {\n type : 'fields',\n fieldInfos : [\n { fieldName: 'FPD_DESC', label: 'Fire District/Dept.', },\n { fieldName: 'FPD_CODE', label: 'Fire District/Dept. Code', },\n { fieldName: 'TANKER', label: 'Has Tanker', },\n { fieldName: 'COUNTY', label: 'County', },\n ],\n }, ],\n },\n}\n\n\nexport const UGA = {\n url : 'https://services.arcgis.com/jsIt88o09Q0r1j8h/ArcGIS/rest/services/CityUGA2019/FeatureServer/0',\n id : 'UGA',\n title : 'Urban Growth Area',\n outFields : [ '*', ],\n definitionExpression : 'UGA_NM <> \\'\\' and UGA_NM is not null',\n renderer : SIMPLE_DARK_BLUE_POLYGON,\n visible : false,\n labelingInfo : {\n labelExpressionInfo: {\n expression: '$feature.UGA_NM',\n },\n symbol: {\n type : 'text',\n color : 'black',\n haloSize : 1,\n haloColor : 'white',\n },\n },\n popupTemplate: {\n title : '{UGA_NM}',\n content : [ {\n type : 'fields',\n fieldInfos : [\n { fieldName: 'UGA_NM', label: 'UGA Name', },\n { fieldName: 'UGA_NM2', label: 'UGA Name Alt.', },\n { fieldName: 'GMA', label: 'Growth Mgmt. Act', },\n { fieldName: 'INCORP', label: 'Incorporated', },\n { fieldName: 'CITY_NM', label: 'City', },\n { fieldName: 'COUNTY_NM', label: 'County', },\n { fieldName: 'ORIGIN', label: 'Origin', },\n ],\n }, ],\n },\n}\n\n\nexport const FIRE_DANGER = {\n url : `${REACT_APP_DNR_GIS_SERVICES}Public_Wildfire/WADNR_PUBLIC_WD_WildfireDanger/MapServer/0`,\n id : 'FIRE_DANGER',\n title : 'Fire Danger',\n outFields : [ '*', ],\n visible : true,\n renderer : FIRE_DANGER_RENDERER,\n labelingInfo : {\n labelExpressionInfo: {\n expression: '$feature.FIREDANGER_AREA_NM',\n },\n symbol: {\n type : 'text',\n color : 'black',\n haloSize : 1,\n haloColor : 'white',\n },\n },\n popupTemplate: {\n title : '{FIREDANGER_AREA_NM} - {FIRE_DANGER_LEVEL_NM}',\n content : [ {\n type : 'fields',\n fieldInfos : [\n { fieldName: 'FIREDANGER_AREA_NM', label: 'Area Name', },\n { fieldName: 'FIRE_DANGER_LEVEL_NM', label: 'Fire Danger Level', },\n { fieldName: 'FIRE_DANGER_LEVEL_CD', label: 'Fire Danger Code', },\n { fieldName: 'NOTES_TXT', label: 'Comments', },\n { fieldName: 'DNR_REGION_NAME', label: 'Region', },\n { fieldName: 'REGION_PHONE_NO', label: 'Phone #', },\n { fieldName: 'REGION_EMAIL_ADDR', label: 'Email', },\n ],\n }, ],\n },\n}\n\n\nexport const BURN_BAN = {\n url : `${REACT_APP_DNR_GIS_SERVICES}Public_Wildfire/WADNR_PUBLIC_WD_WildfireDanger/MapServer/1`,\n id : 'BURN_BAN',\n title : 'Burn Bans',\n outFields : [ '*', ],\n visible : true,\n popupTemplate : {\n title : '{FIREDANGER_AREA_NM} - {BURN_BAN_LEVEL_NM}',\n content : [ {\n type : 'fields',\n fieldInfos : [\n { fieldName: 'FIREDANGER_AREA_NM', label: 'Area Name', },\n { fieldName: 'BURN_BAN_LEVEL_NM', label: 'Burn Ban Level', },\n { fieldName: 'BURN_BAN_LEVEL_CD', label: 'Burn Ban Code', },\n { fieldName: 'NOTES_TXT', label: 'Comments', },\n { fieldName: 'DNR_REGION_NAME', label: 'Region', },\n { fieldName: 'REGION_PHONE_NO', label: 'Phone #', },\n { fieldName: 'REGION_EMAIL_ADDR', label: 'Email', },\n ],\n }, ],\n },\n}\n\n\nexport const SMOKE_PLANNING_AREAS = {\n url : 'https://services.arcgis.com/6lCKYNJLvwTXqrmp/arcgis/rest/services/AQ/FeatureServer/1',\n id : 'SMOKE_PLANNING_AREAS',\n title : 'Smoke Planning Areas',\n outFields : [ '*', ],\n visible : false,\n renderer : SIMPLE_DARK_PURPLE_POLYGON,\n popupTemplate : {\n title : '{AreaID} - {AreaName}',\n content : [ {\n type : 'fields',\n fieldInfos : [\n { fieldName: 'AreaID', label: 'Area ID', },\n { fieldName: 'AreaName', label: 'Area Name', },\n { fieldName: 'AQDataPeriod', label: 'AQ Data Period', },\n ],\n }, ],\n },\n}\n\n// This is a reverse order of the order the layers will draw\n// Meaning BURN_BAN is the top most layer and will appear over all other layers\nexport const ALL_LAYERS = [\n TRS,\n COUNTIES,\n REGIONS,\n FIRE_DISTRICTS,\n UGA,\n SMOKE_PLANNING_AREAS,\n FIRE_DANGER,\n BURN_BAN,\n]\nexport default ALL_LAYERS","export function permitAction (layerId) {\n const actionId = 'burn-permit'\n layerId = layerId || 'BurnPermits'\n return {\n id : actionId,\n title : 'Permit',\n className : 'fa fa-link',\n customAction : evt => {\n if (evt.action.id === actionId) {\n for (let i = 0, len = evt.features.length; i < len; i++) {\n const feat = evt.features[i]\n if (feat.layer.id === layerId) {\n const { BurnPermitId, } = feat.attributes\n this.navigate(`/permits/${BurnPermitId}`)\n break\n }\n }\n }\n },\n }\n}\n\nexport function burnRequestAction (layerId) {\n const actionId = 'burn-request'\n layerId = layerId || 'BurnRequests'\n return {\n id : actionId,\n title : 'Request',\n className : 'fa fa-link',\n customAction : evt => {\n if (evt.action.id === actionId) {\n for (let i = 0, len = evt.features.length; i < len; i++) {\n const feat = evt.features[i]\n if (feat.layer.id === layerId) {\n const { BurnRequestId, } = feat.attributes\n this.navigate(`/burn-requests/${BurnRequestId}`)\n break\n }\n }\n }\n },\n }\n}\n\nexport function customerInteractionAction (layerId, route, title = 'Customer Interaction') {\n if (!layerId) {\n throw new Error('No `layerId` provided for customerInteractionAction')\n }\n if (!route) {\n throw new Error('No `route` provided for customerInteractionAction')\n }\n const actionId = 'customer-interaction'\n return {\n id : actionId,\n title,\n className : 'fa fa-link',\n customAction : evt => {\n if (evt.action.id === actionId) {\n for (let i = 0, len = evt.features.length; i < len; i++) {\n const feat = evt.features[i]\n if (feat.layer.id === layerId) {\n const { CustomerInteractionId, } = feat.attributes\n this.navigate(`/${route}/${CustomerInteractionId}`)\n break\n }\n }\n }\n },\n }\n}\n","import {\r\n BURN_PERMIT_STATUS_POINT,\r\n BURN_REQUEST_STATUS_POINT,\r\n UGA_BURN_REQUEST_STATUS_POINT,\r\n UGA_POST_BURN_POINT,\r\n POST_BURN_POINT,\r\n} from './renderers'\r\nimport { permitAction, burnRequestAction, } from './actions'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\n\r\nconst dateExpression = (fieldName) => {\r\n return {\r\n name : fieldName,\r\n expression : `(Month($feature.${fieldName}) + 1) + '/' + Day($feature.${fieldName}) + '/' + YEAR($feature.${fieldName})`,\r\n }\r\n}\r\n\r\nconst latLongExpression = {\r\n title : 'Lat, Long',\r\n name : 'LatLong',\r\n expression : 'Concatenate($feature.Latitude, \\', \\', $feature.Longitude)',\r\n}\r\n\r\nexport const BURN_PERMITS_LAYER_ID = 'BurnPermits'\r\n\r\nexport function BURN_PERMITS () {\r\n \r\n const fieldInfos = [\r\n { fieldName: 'BurnPermitId', label: 'Burn Permit ID', },\r\n { fieldName: 'BurnPermitNumber', label: 'Burn Permit #', },\r\n { fieldName: 'TotalPermitTonnage', label: 'Permit Tonnage', },\r\n { fieldName: 'Elevation', label: 'Elevation', },\r\n { fieldName: 'BurnAcres', label: 'Burn Acres', },\r\n { fieldName: 'expression/BurnPermitExpirationDate', },\r\n { fieldName: 'BurnPermitStatus', label: 'Permit Status', },\r\n { fieldName: 'IsUGA', label: 'Is in UGA', },\r\n { fieldName: 'IsForestHealthExempt', label: 'Is Forest Health Exempt', },\r\n { fieldName: 'expression/LatLong', },\r\n ]\r\n\r\n if (this !== undefined && this.showLandownerAgent) {\r\n fieldInfos.splice(fieldInfos.findIndex(f => f.fieldName === 'expression/BurnPermitExpirationDate'), 0, { fieldName: 'Landowner', label: 'Landowner', })\r\n fieldInfos.splice(fieldInfos.findIndex(f => f.fieldName === 'expression/BurnPermitExpirationDate'), 0, { fieldName: 'Agent', label: 'Agent', })\r\n }\r\n\r\n return {\r\n id : BURN_PERMITS_LAYER_ID,\r\n url : `${REACT_APP_SERVER_URL}BurnPermits/GeoJSON`,\r\n title : 'Permitted Burn Locations',\r\n outFields : [ '*', ],\r\n renderer : BURN_PERMIT_STATUS_POINT,\r\n geometryType : 'point',\r\n popupTemplate : {\r\n title : 'Permit #{BurnPermitNumber}',\r\n content : [\r\n {\r\n type: 'fields',\r\n fieldInfos,\r\n },\r\n ],\r\n expressionInfos: [\r\n { title: 'Expiration Date', ...dateExpression('BurnPermitExpirationDate'), },\r\n { ...latLongExpression, },\r\n ],\r\n actions: [ permitAction.bind(this)(BURN_PERMITS_LAYER_ID), ],\r\n },\r\n }\r\n}\r\n\r\nexport function BURN_REQUESTS (ugaOnly = false) {\r\n\r\n const fieldInfos = [\r\n { fieldName: 'BurnRequestId', label: 'Burn Request ID', format: 'string', },\r\n { fieldName: 'BurnPermitId', label: 'Burn Permit ID', format: 'string', },\r\n { fieldName: 'BurnPermitNumber', label: 'Burn Permit #', },\r\n { fieldName: 'TotalProposedBurnQuantity', label: 'Proposed Burn Quantity', },\r\n { fieldName: 'ProposedBurnArea', label: 'Proposed Burn Area', },\r\n { fieldName: 'expression/PlannedIgnitionDate', },\r\n { fieldName: 'PlannedIgnitionTime', label: 'Planned Ignition Time', },\r\n { fieldName: 'expression/BurnRequestDate', },\r\n { fieldName: 'MultiDayBurn', label: 'Multi Day Burn', },\r\n { fieldName: 'Elevation', label: 'Elevation', },\r\n { fieldName: 'BurnAcres', label: 'Burn Acres', },\r\n { fieldName: 'BurnRequestStatus', label: 'Status', },\r\n { fieldName: 'expression/BurnPermitExpirationDate', },\r\n { fieldName: 'HasPostBurn', label: 'Has Post Burn', },\r\n { fieldName: 'IsUGA', label: 'Is in UGA', },\r\n { fieldName: 'IsForestHealthExempt', label: 'Is Forest Health Exempt', },\r\n { fieldName: 'expression/LatLong', },\r\n ]\r\n \r\n if (this !== undefined && this.showLandownerAgent) {\r\n fieldInfos.splice(fieldInfos.findIndex(f => f.fieldName === 'BurnRequestStatus'), 0, { fieldName: 'Landowner', label: 'Landowner', })\r\n fieldInfos.splice(fieldInfos.findIndex(f => f.fieldName === 'BurnRequestStatus'), 0, { fieldName: 'Agent', label: 'Agent', })\r\n }\r\n\r\n const id = `Planned${ugaOnly ? 'UGA' : ''}Burns`\r\n const url = `${REACT_APP_SERVER_URL}BurnRequests/GeoJSON?isUga=${ugaOnly}`\r\n \r\n return {\r\n id,\r\n url,\r\n title : `Planned ${ugaOnly ? 'UGA' : ''} Burns`,\r\n outFields : [ '*', ],\r\n renderer : ugaOnly ? UGA_BURN_REQUEST_STATUS_POINT : BURN_REQUEST_STATUS_POINT,\r\n geometryType : 'point',\r\n popupTemplate : {\r\n title : 'Planned Burn #{BurnRequestId}',\r\n content : [\r\n {\r\n type: 'fields',\r\n fieldInfos,\r\n },\r\n ],\r\n expressionInfos: [\r\n { title: 'Planned Ignition Date', ...dateExpression('PlannedIgnitionDate'), },\r\n { title: 'Burn Request Date', ...dateExpression('BurnRequestDate'), },\r\n { title: 'Expiration Date', ...dateExpression('BurnPermitExpirationDate'), },\r\n { ...latLongExpression, },\r\n ],\r\n actions: [ burnRequestAction.bind(this)(id), permitAction.bind(this)(id), ],\r\n },\r\n }\r\n}\r\n\r\nexport function UGA_BURN_REQUESTS () {\r\n const burnReqs = { ...BURN_REQUESTS.bind(this)(true), }\r\n return {\r\n ...burnReqs,\r\n }\r\n}\r\n\r\nexport function POST_BURNS (ugaOnly = false) {\r\n\r\n const fieldInfos = [\r\n { fieldName: 'BurnRequestId', label: 'Burn Request Id', },\r\n { fieldName: 'expression/PlannedIgnitionDate', },\r\n { fieldName: 'expression/BurnDate', },\r\n \r\n { fieldName: 'PlannedIgnitionPeriod', label: 'Planned Ignition Period', },\r\n { fieldName: 'IgnitionPeriod', label: 'Reported Ignition Period', },\r\n\r\n { fieldName: 'PlannedIgnitionTime', label: 'Planned Ignition Time', },\r\n { fieldName: 'BurnTime', label: 'Reported Burn Time', },\r\n\r\n { fieldName: 'ProposedBurnedArea', label: 'Proposed Burned Area', },\r\n { fieldName: 'BurnedAcres', label: 'Reported Burned Acres', },\r\n { fieldName: 'HarvestAcres', label: 'Total Permit Area', },\r\n\r\n { fieldName: 'TotalProposedBurnQuantity', label: 'Proposed Burn Tonnage', },\r\n { fieldName: 'ConsumedTons', label: 'Reported Burned Tonnage', },\r\n { fieldName: 'TotalPermitTonnage', label: 'Total Permit Tonnage', },\r\n\r\n { fieldName: 'expression/CreateDate', },\r\n\r\n { fieldName: 'MultiDayBurnFlag', label: 'Multi Day Burn', },\r\n { fieldName: 'IsUGA', label: 'Is in UGA', },\r\n { fieldName: 'IsForestHealthExempt', label: 'Is Forest Health Exempt', },\r\n { fieldName: 'expression/LatLong', },\r\n ]\r\n\r\n if (this !== undefined && this.showLandownerAgent) {\r\n fieldInfos.splice(fieldInfos.findIndex(f => f.fieldName === 'expression/CreateDate'), 0, { fieldName: 'LandownerName', label: 'Landowner', })\r\n fieldInfos.splice(fieldInfos.findIndex(f => f.fieldName === 'expression/CreateDate'), 0, { fieldName: 'AgentName', label: 'Agent', })\r\n fieldInfos.splice(fieldInfos.findIndex(f => f.fieldName === 'expression/CreateDate'), 0, { fieldName: 'PostBurnComments', label: 'Post-Burn Comments', })\r\n }\r\n\r\n const id = `Completed${ugaOnly ? 'UGA' : ''}Burns`\r\n const url = `${REACT_APP_SERVER_URL}PostBurnReports/GeoJSON?isUga=${ugaOnly}`\r\n\r\n return {\r\n id,\r\n url,\r\n title : `Recent ${ugaOnly ? 'UGA' : 'Completed'} Burns`,\r\n outFields : [ '*', ],\r\n renderer : ugaOnly ? UGA_POST_BURN_POINT : POST_BURN_POINT,\r\n geometryType : 'point',\r\n popupTemplate : {\r\n title : 'Burn Permit #{BurnPermitNumber}',\r\n content : [\r\n {\r\n type: 'fields',\r\n fieldInfos,\r\n },\r\n ],\r\n expressionInfos: [\r\n { title: 'Planned Ignition Date', ...dateExpression('PlannedIgnitionDate'), },\r\n { title: 'Burn Date', ...dateExpression('BurnDate'), },\r\n { title: 'Post Burn Reported On', ...dateExpression('CreateDate'), },\r\n { ...latLongExpression, },\r\n ],\r\n actions: [ burnRequestAction.bind(this)(id), permitAction.bind(this)(id), ],\r\n },\r\n }\r\n}\r\n\r\nexport function UGA_POST_BURNS () {\r\n const postBurns = { ...POST_BURNS.bind(this)(true), }\r\n return {\r\n ...postBurns,\r\n }\r\n}\r\n\r\nconst ALL_LAYERS = [\r\n BURN_PERMITS,\r\n BURN_REQUESTS,\r\n UGA_BURN_REQUESTS,\r\n POST_BURNS,\r\n UGA_POST_BURNS,\r\n]\r\n\r\nexport default ALL_LAYERS","/**\r\n * This file setup was modified from the example found here:\r\n * https://gist.github.com/jfbloom22/6ef92d9ff28007be8ce1154d28e7c66e\r\n */\r\nimport { createStore, applyMiddleware, compose, } from 'redux'\r\nimport { persistStore, persistReducer, createTransform, } from 'redux-persist'\r\n//import storage from 'redux-persist/es/storage'\r\nimport * as localForage from 'localforage'\r\nimport { createMiddleware, } from 'redux-beacon'\r\nimport GoogleAnalytics, { trackPageView, } from '@redux-beacon/google-analytics'\r\nimport { createOffline, } from '@redux-offline/redux-offline'\r\nimport offlineConfig from '@redux-offline/redux-offline/lib/defaults/index'\r\nimport defaultQueue from '@redux-offline/redux-offline/lib/defaults/queue'\r\nimport { composeWithDevTools, } from 'redux-devtools-extension/logOnlyInProduction'\r\nimport createSagaMiddleware from 'redux-saga'\r\nimport { logger, } from 'redux-logger'\r\n\r\nimport rootReducer, { EnhanceOffline, } from './'\r\nimport { objHasProp, } from '../utilities'\r\nimport { AppTypes, } from './AppRedux'\r\n\r\nconst {\r\n REACT_APP_ANALYTICS_ENABLED,\r\n REACT_APP_SHOW_LOGGING,\r\n REACT_APP_ENABLE_REDUX_DEV_TOOLS,\r\n NODE_ENV,\r\n // eslint-disable-next-line no-undef\r\n} = process.env\r\n\r\n/**\r\n * This array of actions is used by the custom queue config to ensure\r\n * only the latest call to this action is processed. This is helpful in\r\n * cases when users will tab through the Calendar or execute multiple \r\n * searches on the Burn Permit or Request Searches.\r\n * \r\n * see this for more info regarding manipulating the queue: https://github.com/redux-offline/redux-offline/blob/develop/docs/api/config.md#queue\r\n */\r\nconst takeLatestActions = [\r\n 'SEARCH_BURN_REQUESTS',\r\n 'GET_MY_BURN_REQUESTS',\r\n 'GET_BURN_REQUEST_INFO',\r\n 'SEARCH_BURN_PERMITS',\r\n 'GET_MY_BURN_PERMITS',\r\n 'SET_START_END',\r\n]\r\n\r\nlet store\r\nconst getStoreInst = () => store\r\n\r\nconst queue = {\r\n ...defaultQueue,\r\n enqueue (arr, action) {\r\n const { type, } = action\r\n if (takeLatestActions.includes(type)) {\r\n const actionIdx = arr.map(a => a.type).indexOf(type)\r\n if (actionIdx > -1) {\r\n arr.splice(actionIdx, 1)\r\n }\r\n }\r\n arr.push(action)\r\n return arr\r\n },\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nconst effect = async (_effect, _action) => {\r\n const { token, } = (_effect.store.getState() || {}).User || {}\r\n const init = {\r\n headers: {\r\n 'Content-Type' : 'application/json',\r\n 'Authorization' : `Bearer ${token}`,\r\n },\r\n ..._effect.init,\r\n }\r\n if (objHasProp(init, 'body') && typeof init.body !== 'string') {\r\n init.body = JSON.stringify(init.body)\r\n }\r\n const resp = await fetch(_effect.url, init)\r\n if (!resp.ok && resp.status !== 404) {\r\n throw resp\r\n }\r\n return resp\r\n}\r\n\r\nconst customEffect = (getStore) => (effectPayload, action) => {\r\n effectPayload.store = getStore()\r\n return effect(effectPayload, action)\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nconst discard = async (resp, _action, _retries) => {\r\n if (!resp) {\r\n return false\r\n }\r\n const { status, } = resp\r\n if (status < 400 || status === 404) {\r\n return false\r\n }\r\n \r\n return true\r\n}\r\n\r\nconst {\r\n middleware: offlineMiddleware,\r\n enhanceReducer: offlineEnhanceReducer,\r\n enhanceStore: offlineEnhanceStore,\r\n} = createOffline({\r\n ...offlineConfig,\r\n persist : false,\r\n effect : customEffect(getStoreInst),\r\n discard,\r\n queue,\r\n})\r\n\r\nconst persistConfig = {\r\n key : 'wa_dnr_burn_portal',\r\n transforms : [\r\n createTransform(\r\n (inboundState) => {\r\n return { ...inboundState, }\r\n },\r\n (outboundState) => {\r\n return { ...outboundState, }\r\n },\r\n { whitelist: [ 'orm', ], }\r\n ),\r\n ],\r\n storage: localForage,\r\n}\r\n\r\nconst persistedReducer = persistReducer(\r\n persistConfig,\r\n offlineEnhanceReducer(rootReducer)\r\n)\r\n\r\n// If REACT_APP_ANALYTICS_ENABLED is not set to `true`\r\n// this will never get used\r\nconst pageViewMiddleware = {\r\n [AppTypes.LOG_LAST_ROUTE]: trackPageView(action => ({\r\n page: action.lastRoute,\r\n })),\r\n}\r\n\r\n// creates the store\r\nexport default (rootReducer, rootSaga) => {\r\n\r\n const sagaMiddleware = createSagaMiddleware()\r\n\r\n const middleware = [\r\n offlineMiddleware,\r\n sagaMiddleware,\r\n ]\r\n if (REACT_APP_ANALYTICS_ENABLED === true) {\r\n const gaMiddleware = createMiddleware(pageViewMiddleware, GoogleAnalytics())\r\n middleware.push(gaMiddleware)\r\n }\r\n\r\n if (REACT_APP_SHOW_LOGGING === 'true') {\r\n middleware.push(logger)\r\n }\r\n\r\n const enhancers = [ offlineEnhanceStore, applyMiddleware(...middleware), ]\r\n\r\n // When downloading Permits, Requests, etc. for offline while developing, or while in prod, you may\r\n // want to disable Redux Dev Tools before you do the download otherwise the app will crash\r\n let composer = compose\r\n if (NODE_ENV !== 'production' || REACT_APP_ENABLE_REDUX_DEV_TOOLS) {\r\n composer = composeWithDevTools({ trace: true, traceLimit: 25, })\r\n }\r\n \r\n const reducer = EnhanceOffline(persistedReducer)\r\n store = createStore(reducer, composer(...enhancers))\r\n\r\n // kick off root saga\r\n sagaMiddleware.run(rootSaga)\r\n\r\n const persistor = persistStore(store)\r\n\r\n return { persistor, store, }\r\n}","import { FIRE_DISTRICTS, TRS, UGA, } from '../map/featureLayers'\r\nimport ALL_LAYERS from '../map/geojsonLayers'\r\n\r\nconst CalendarLayerConfig = {\r\n name : 'Calendar',\r\n hiddenLayers : [\r\n TRS.id,\r\n FIRE_DISTRICTS.id,\r\n UGA.id,\r\n ],\r\n unavailableLayers: ALL_LAYERS.map(l => l().id),\r\n}\r\n\r\nexport default CalendarLayerConfig","import {\r\n FIRE_DISTRICTS,\r\n TRS,\r\n UGA,\r\n} from '../map/featureLayers'\r\nimport { BURN_PERMITS, } from '../map/geojsonLayers'\r\n\r\nconst DashboardLayerConfig = {\r\n name : 'Dashboard',\r\n hiddenLayers : [\r\n FIRE_DISTRICTS.id,\r\n TRS.id,\r\n UGA.id,\r\n BURN_PERMITS().id,\r\n ],\r\n unavailableLayers: [],\r\n}\r\n\r\nexport default DashboardLayerConfig","import {\r\n TRS,\r\n UGA,\r\n COUNTIES,\r\n REGIONS,\r\n FIRE_DISTRICTS,\r\n SMOKE_PLANNING_AREAS,\r\n} from '../map/featureLayers'\r\nimport ALL_LAYERS from '../map/geojsonLayers'\r\n\r\nconst MyPermitsLayerConfig = {\r\n name : 'My Permits',\r\n hiddenLayers : [\r\n TRS.id,\r\n UGA.id,\r\n COUNTIES.id,\r\n REGIONS.id,\r\n FIRE_DISTRICTS.id,\r\n SMOKE_PLANNING_AREAS.id,\r\n ],\r\n unavailableLayers: ALL_LAYERS.map(l => l().id),\r\n}\r\n\r\nexport default MyPermitsLayerConfig","import {\r\n TRS,\r\n UGA,\r\n COUNTIES,\r\n REGIONS,\r\n FIRE_DISTRICTS,\r\n SMOKE_PLANNING_AREAS,\r\n} from '../map/featureLayers'\r\nimport ALL_LAYERS from '../map/geojsonLayers'\r\n\r\nconst MyRequestsLayerConfig = {\r\n name : 'My Requests',\r\n hiddenLayers : [\r\n TRS.id,\r\n UGA.id,\r\n COUNTIES.id,\r\n REGIONS.id,\r\n FIRE_DISTRICTS.id,\r\n SMOKE_PLANNING_AREAS.id,\r\n ],\r\n unavailableLayers: ALL_LAYERS.map(l => l().id),\r\n}\r\n\r\nexport default MyRequestsLayerConfig","import {\r\n TRS,\r\n SMOKE_PLANNING_AREAS,\r\n FIRE_DANGER,\r\n BURN_BAN,\r\n COUNTIES,\r\n REGIONS,\r\n UGA,\r\n FIRE_DISTRICTS,\r\n} from '../map/featureLayers'\r\nimport ALL_LAYERS from '../map/geojsonLayers'\r\n\r\nconst PermitApplicationLayerConfig = {\r\n name : 'Permit Application',\r\n hiddenLayers : [\r\n SMOKE_PLANNING_AREAS.id,\r\n FIRE_DISTRICTS.id,\r\n FIRE_DANGER.id,\r\n BURN_BAN.id,\r\n UGA.id,\r\n TRS.id,\r\n ],\r\n requiredLayers: [\r\n // These layers are necessary for the intersecting\r\n // features query, so don't let the users disable them\r\n // Or we auto enable them and wait until they're available\r\n // in the intersecting features query\r\n COUNTIES.id,\r\n REGIONS.id,\r\n TRS.id,\r\n ],\r\n unavailableLayers: ALL_LAYERS.map(l => l().id),\r\n}\r\n\r\nexport default PermitApplicationLayerConfig","import {\r\n TRS,\r\n UGA,\r\n COUNTIES,\r\n REGIONS,\r\n FIRE_DISTRICTS,\r\n SMOKE_PLANNING_AREAS,\r\n} from '../map/featureLayers'\r\nimport ALL_LAYERS from '../map/geojsonLayers'\r\n\r\nconst PermitSearchLayerConfig = {\r\n name : 'Permit Search',\r\n hiddenLayers : [\r\n TRS.id,\r\n UGA.id,\r\n COUNTIES.id,\r\n REGIONS.id,\r\n FIRE_DISTRICTS.id,\r\n SMOKE_PLANNING_AREAS.id,\r\n ],\r\n unavailableLayers: ALL_LAYERS.map(l => l().id),\r\n}\r\n\r\nexport default PermitSearchLayerConfig","import {\r\n TRS,\r\n UGA,\r\n COUNTIES,\r\n REGIONS,\r\n FIRE_DISTRICTS,\r\n SMOKE_PLANNING_AREAS,\r\n} from '../map/featureLayers'\r\nimport ALL_LAYERS from '../map/geojsonLayers'\r\n\r\nconst RequestSearchLayerConfig = {\r\n name : 'Request Search',\r\n hiddenLayers : [\r\n TRS.id,\r\n UGA.id,\r\n COUNTIES.id,\r\n REGIONS.id,\r\n FIRE_DISTRICTS.id,\r\n SMOKE_PLANNING_AREAS.id,\r\n ],\r\n unavailableLayers: ALL_LAYERS.map(l => l().id),\r\n}\r\n\r\nexport default RequestSearchLayerConfig","import {\n TRS,\n UGA,\n COUNTIES,\n FIRE_DISTRICTS,\n SMOKE_PLANNING_AREAS,\n FIRE_DANGER,\n} from '../map/featureLayers'\nimport ALL_LAYERS from '../map/geojsonLayers'\n\nconst SmokeComplaintsLayerConfig = {\n name : 'SmokeComplaints',\n hiddenLayers : [\n TRS.id,\n UGA.id,\n COUNTIES.id,\n FIRE_DANGER.id,\n FIRE_DISTRICTS.id,\n SMOKE_PLANNING_AREAS.id,\n ],\n unavailableLayers: ALL_LAYERS.map(l => l().id),\n}\n\nexport default SmokeComplaintsLayerConfig","import CalendarLayerConfig from './Calendar'\nimport DashboardLayerConfig from './Dashboard'\nimport MyPermitsLayerConfig from './MyPermits'\nimport MyRequestsLayerConfig from './MyRequests'\nimport PermitApplicationLayerConfig from './PermitApplication'\nimport PermitSearchLayerConfig from './PermitSearch'\nimport RequestSearchLayerConfig from './RequestSearch'\nimport SmokeComplaintsLayerConfig from './SmokeComplaints'\n\nconst DEFAULT_CONFIGS = [\n DashboardLayerConfig,\n CalendarLayerConfig,\n MyPermitsLayerConfig,\n MyRequestsLayerConfig,\n PermitApplicationLayerConfig,\n PermitSearchLayerConfig,\n RequestSearchLayerConfig,\n SmokeComplaintsLayerConfig,\n]\n\nexport {\n CalendarLayerConfig,\n DashboardLayerConfig,\n MyPermitsLayerConfig,\n MyRequestsLayerConfig,\n PermitApplicationLayerConfig,\n PermitSearchLayerConfig,\n RequestSearchLayerConfig,\n SmokeComplaintsLayerConfig,\n}\n\nexport default DEFAULT_CONFIGS","import { createReducer, createActions, } from 'reduxsauce'\n\nimport { removeItemFromArray, addItemToArray, } from '../utilities'\n\nimport DEFAULT_COMPONENT_LAYER_CONFIGS from '../config/layerConfigs'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n resetToInitialMapState : null,\n getLatLongFromMap : [ 'enable', 'IncludeIntersectingFeatures', ],\n clearLatLong : null,\n setLatLong : [ 'Latitude', 'Longitude', 'IntersectingFeatures', ],\n showLayer : [ 'layerId', ],\n hideLayer : [ 'layerId', ],\n setConfigLayerVisibility : [ 'configName', 'layerId', 'visible', ],\n toggleAllConfigLayerVisibility : [ 'configName', 'layerIds', 'visible', ],\n mapLoading : null,\n mapDoneLoading : null,\n toggleDownloadMapData : null,\n checkIfGraphicsOverlapLayerFeatures : [ 'layerId', 'graphics', ],\n graphicsOverlapFeatures : [ 'overlap', 'features', ],\n activeMapId : [ 'mapId', ],\n mapDragEnd : [ 'evt', ],\n})\n\nexport const MapTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nconst INITIAL_STATE = Object.freeze({\n LatLong: {\n Latitude : null,\n Longitude : null,\n },\n GetLatLongFromMap : false,\n IncludeIntersectingFeatures : false,\n hiddenLayerIds : [],\n MapLoading : false,\n MapActive : false,\n downloadMapData : false,\n layerId : null,\n overlapGraphics : [],\n intersectingFeatures : [],\n graphicsOverlap : false,\n componentLayerConfigs : DEFAULT_COMPONENT_LAYER_CONFIGS,\n activeMapId : null,\n})\n\n/* ------------- Reducers ------------- */\n\nconst resetToInitialMapState = () => {\n return INITIAL_STATE\n}\n\nconst mapLoading = (state) => {\n const newState = { ...state, }\n newState.GetLatLongFromMap = false\n newState.MapLoading = true\n newState.MapActive = false\n newState.graphicsOverlap = false\n newState.overlapGraphics = []\n newState.layerId = null\n return newState\n}\n\nconst mapDoneLoading = (state) => {\n const newState = { ...state, }\n newState.MapLoading = false\n newState.MapActive = true\n return newState\n}\n\nconst getLatLongFromMap = (state, { enable, IncludeIntersectingFeatures, }) => {\n return { ...state, GetLatLongFromMap: enable || false, IncludeIntersectingFeatures: IncludeIntersectingFeatures || false, }\n}\n\nconst clearLatLong = state => {\n const newState = { ...state, }\n newState.LatLong = {\n Latitude : null,\n Longitude : null,\n }\n return newState\n}\n\nconst setLatLong = (state, { Latitude, Longitude, IntersectingFeatures = null, }) => {\n const newState = { ...state, }\n if (Latitude) {\n newState.LatLong.Latitude = Latitude\n }\n if (Longitude) {\n newState.LatLong.Longitude = Longitude\n }\n newState.intersectingFeatures = [ ...(IntersectingFeatures || []), ]\n return newState\n}\n\nconst showLayer = (state, { layerId, }) => {\n const newState = { ...state, }\n newState.hiddenLayerIds = removeItemFromArray(newState.hiddenLayerIds, layerId)\n return newState\n}\n\nconst hideLayer = (state, { layerId, }) => {\n const newState = { ...state, }\n newState.hiddenLayerIds = addItemToArray(newState.hiddenLayerIds, layerId)\n return newState\n}\n\nconst toggleDownloadMapData = (state) => {\n return { ...state, downloadMapData: !state.downloadMapData, }\n}\n\n// Provide default values so this can be called without any arguments to allow\n// callers to clear/reset the state values\nconst checkIfGraphicsOverlapLayerFeatures = (state, { layerId = '', graphics = [], }) => {\n return { ...state, layerId, overlapGraphics: [ ...graphics, ], graphicsOverlap: false, }\n}\n\nconst graphicsOverlapFeatures = (state, { overlap = false, features = [], }) => {\n return { ...state, graphicsOverlap: overlap, overlappingFeatures: [ ...features, ], }\n}\n\nconst setConfigLayerVisibility = (state, { configName, layerId, visible, }) => {\n const newState = { ...state, }\n const layerConfigIdx = newState.componentLayerConfigs.findIndex(c => c.name === configName)\n const layerConfig = newState.componentLayerConfigs[layerConfigIdx]\n if (!layerConfig) {\n return newState\n }\n if (visible) {\n layerConfig.hiddenLayers = removeItemFromArray(layerConfig.hiddenLayers, layerId)\n }\n else {\n layerConfig.hiddenLayers = addItemToArray(layerConfig.hiddenLayers, layerId)\n }\n newState.componentLayerConfigs[layerConfigIdx] = layerConfig\n return newState\n}\n\nconst toggleAllConfigLayerVisibility = (state, { configName, layerIds, visible, }) => {\n const newState = { ...state, }\n const layerConfigIdx = newState.componentLayerConfigs.findIndex(c => c.name === configName)\n const layerConfig = newState.componentLayerConfigs[layerConfigIdx]\n if (!layerConfig) {\n return newState\n }\n if (visible) {\n layerConfig.hiddenLayers = []\n }\n else {\n layerConfig.hiddenLayers = [ ...layerIds, ]\n }\n newState.componentLayerConfigs[layerConfigIdx] = layerConfig\n return newState\n}\n\nconst activeMapId = (state, { mapId = null, }) => ({ ...state, activeMapId: mapId, })\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.RESET_TO_INITIAL_MAP_STATE] : resetToInitialMapState,\n [Types.CLEAR_LAT_LONG] : clearLatLong,\n [Types.SET_LAT_LONG] : setLatLong,\n [Types.GET_LAT_LONG_FROM_MAP] : getLatLongFromMap,\n [Types.SHOW_LAYER] : showLayer,\n [Types.HIDE_LAYER] : hideLayer,\n [Types.MAP_LOADING] : mapLoading,\n [Types.MAP_DONE_LOADING] : mapDoneLoading,\n [Types.TOGGLE_DOWNLOAD_MAP_DATA] : toggleDownloadMapData,\n [Types.CHECK_IF_GRAPHICS_OVERLAP_LAYER_FEATURES] : checkIfGraphicsOverlapLayerFeatures,\n [Types.GRAPHICS_OVERLAP_FEATURES] : graphicsOverlapFeatures,\n [Types.SET_CONFIG_LAYER_VISIBILITY] : setConfigLayerVisibility,\n [Types.TOGGLE_ALL_CONFIG_LAYER_VISIBILITY] : toggleAllConfigLayerVisibility,\n [Types.ACTIVE_MAP_ID] : activeMapId,\n})","import { createReducer, createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n openModal : [ 'modalKey', ],\n closeModal : null,\n toggleNavbar : null,\n})\n\nexport const UiTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nconst INITIAL_STATE = {\n Modal: {\n showModal : false,\n modalKey : '',\n },\n Navbar: {\n isOpen: false,\n },\n}\n\n/* ------------- Reducers ------------- */\n\nconst openModal = (state, { modalKey, }) => {\n const newState = { ...state, }\n newState.Modal.showModal = true\n if (modalKey) {\n newState.Modal.modalKey = modalKey\n }\n return newState\n}\n\nconst closeModal = (state) => {\n const newState = { ...state, }\n newState.Modal.showModal = false\n newState.Modal.modalKey = ''\n return newState\n}\n\nconst toggleNavbar = (state) => {\n const newState = { ...state, }\n if (!newState.Navbar) {\n newState.Navbar = { isOpen: false, }\n }\n newState.Navbar.isOpen = !newState.Navbar.isOpen\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.OPEN_MODAL] : openModal,\n [Types.CLOSE_MODAL] : closeModal,\n [Types.TOGGLE_NAVBAR] : toggleNavbar,\n})\n","import {\r\n createReducer,\r\n createActions,\r\n} from 'reduxsauce'\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\n\r\nconst { Types, Creators, } = createActions({\r\n resetApplicantInfo : null,\r\n getApplicantInfoData : null,\r\n setSelectedAgencyId : [ 'agencyId', ],\r\n setSelectedAgentId : [ 'personId', ],\r\n setSelectedLandownerId : [ 'personId', ],\r\n setTargetLandowner : [ 'targetLandowner', ],\r\n updateApplicantInfo : [ 'info', ],\r\n setSelectedApplicantInfo : [ 'applicantInfo', ],\r\n setApplicantSectionLoading : [ 'loading', ],\r\n setApplicantInfo : [ 'BurnPermitId', ],\r\n setMailToAgent : [ 'mailToAgent', ],\r\n setContactData : [ 'stateProp', 'value', ],\r\n})\r\n\r\nexport const ApplicantInfoTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nexport const INITIAL_STATE = {\r\n agentId : '',\r\n landownerId : '',\r\n agencyId : '',\r\n mailToAgent : null,\r\n targetLandowner : '',\r\n sectionIsLoading : false,\r\n BurnerPermitAddressId : '',\r\n BurnerPermitPrimaryPhoneId : '',\r\n BurnerPermitSecondaryPhoneId : '',\r\n AgentPermitAddressId : '',\r\n AgentPermitPrimaryPhoneId : '',\r\n AgentPermitSecondaryPhoneId : '',\r\n}\r\n\r\nconst resetApplicantInfo = () => {\r\n return { ...INITIAL_STATE, }\r\n}\r\n\r\nconst getApplicantInfoData = () => {\r\n const newState = { ...INITIAL_STATE, }\r\n newState.sectionIsLoading = true\r\n return newState\r\n}\r\n\r\nconst setApplicantSectionLoading = (state, { loading, }) => {\r\n const newState = { ...state, }\r\n newState.sectionIsLoading = loading || false\r\n return newState\r\n}\r\n\r\nconst setTargetLandowner = (state, { targetLandowner, }) => {\r\n const newState = { ...state, }\r\n newState.targetLandowner = targetLandowner || ''\r\n newState.mailToAgent = targetLandowner === 'Agency' ? true : newState.mailToAgent\r\n newState.BurnerPermitAddressId = ''\r\n newState.BurnerPermitPrimaryPhoneId = ''\r\n newState.BurnerPermitSecondaryPhoneId = ''\r\n return newState\r\n}\r\n\r\nconst setSelectedAgencyId = (state, { agencyId, }) => {\r\n const newState = { ...state, }\r\n newState.targetLandowner = 'Agency'\r\n if (agencyId !== state.agencyId) {\r\n newState.agencyId = agencyId || ''\r\n }\r\n newState.BurnerPermitAddressId = ''\r\n newState.BurnerPermitPrimaryPhoneId = ''\r\n newState.BurnerPermitSecondaryPhoneId = ''\r\n return newState\r\n}\r\n\r\nconst setSelectedAgentId = (state, { personId, }) => {\r\n const newState = { ...state, }\r\n if (personId !== state.agentId) {\r\n newState.agentId = personId || ''\r\n }\r\n newState.AgentPermitAddressId = ''\r\n newState.AgentPermitPrimaryPhoneId = ''\r\n newState.AgentPermitSecondaryPhoneId = ''\r\n return newState\r\n}\r\n\r\nconst setSelectedLandownerId = (state, { personId, }) => {\r\n const newState = { ...state, }\r\n newState.targetLandowner = 'Person'\r\n if (personId !== state.landownerId) {\r\n newState.landownerId = personId || ''\r\n }\r\n newState.BurnerPermitAddressId = ''\r\n newState.BurnerPermitPrimaryPhoneId = ''\r\n newState.BurnerPermitSecondaryPhoneId = ''\r\n return newState\r\n}\r\n\r\nconst setMailToAgent = (state, { mailToAgent, }) => {\r\n const newState = { ...state, }\r\n if (mailToAgent !== state.mailToAgent) {\r\n newState.mailToAgent = mailToAgent\r\n }\r\n if (newState.mailToAgent === false) {\r\n newState.agentId = ''\r\n }\r\n newState.AgentPermitAddressId = ''\r\n newState.AgentPermitPrimaryPhoneId = ''\r\n newState.AgentPermitSecondaryPhoneId = ''\r\n return newState\r\n}\r\n\r\nconst setContactData = (state, { stateProp, value, }) => {\r\n const newState = { ...state, }\r\n newState[stateProp] = value || ''\r\n return newState\r\n}\r\n\r\nconst setSelectedApplicantInfo = (state, { applicantInfo, }) => {\r\n const newState = { ...state, }\r\n newState.targetLandowner = applicantInfo.landownerId > 0 ? 'Person' : applicantInfo.agencyId > 0 ? 'Agency' : ''\r\n newState.agentId = applicantInfo.agentId || ''\r\n newState.landownerId = applicantInfo.landownerId || ''\r\n newState.agencyId = applicantInfo.agencyId || ''\r\n newState.mailToAgent = applicantInfo.mailToAgent || null\r\n newState.BurnerPermitAddressId = ''\r\n newState.BurnerPermitPrimaryPhoneId = ''\r\n newState.BurnerPermitSecondaryPhoneId = ''\r\n newState.AgentPermitAddressId = ''\r\n newState.AgentPermitPrimaryPhoneId = ''\r\n newState.AgentPermitSecondaryPhoneId = ''\r\n return newState\r\n}\r\n\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer({ ...INITIAL_STATE, }, {\r\n [Types.RESET_APPLICANT_INFO] : resetApplicantInfo,\r\n [Types.SET_SELECTED_AGENCY_ID] : setSelectedAgencyId,\r\n [Types.SET_SELECTED_AGENT_ID] : setSelectedAgentId,\r\n [Types.SET_SELECTED_LANDOWNER_ID] : setSelectedLandownerId,\r\n [Types.SET_MAIL_TO_AGENT] : setMailToAgent,\r\n [Types.SET_SELECTED_APPLICANT_INFO] : setSelectedApplicantInfo,\r\n [Types.SET_TARGET_LANDOWNER] : setTargetLandowner,\r\n [Types.GET_APPLICANT_INFO_DATA] : getApplicantInfoData,\r\n [Types.SET_APPLICANT_SECTION_LOADING] : setApplicantSectionLoading,\r\n [Types.SET_CONTACT_DATA] : setContactData,\r\n})","import { createReducer, createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\nconst { Types, Creators, } = createActions({\n // for the container\n activeBurnNoticeSubscriberId : [ 'burnNoticeSubscriberId', ],\n deactivateBurnNoticeSubscriber : null,\n // data loading\n getAllBurnNoticeSubscribers : [ 'forceRefreshFromServer', ],\n getBurnNoticeSubscriber : [ 'burnNoticeSubscriberId', ],\n getBurnNoticeSubscriberLookupData : null,\n newBurnNoticeSubscriber : null,\n createBurnNoticeSubscriber : [ 'burnNoticeSubscriber', 'email', ],\n updateBurnNoticeSubscriber : [ 'burnNoticeSubscriber', ],\n // Phone numbers\n createLocalPhoneForBurnNoticeSubscriber : [ 'burnNoticeSubscriberId', ],\n createBurnNoticeSubscriberPhone : [ 'burnNoticeSubscriberId', 'phone', ],\n deleteBurnNoticeSubscriberPhone : [ 'burnNoticeSubscriberId', 'phoneId', ],\n // Email\n getBurnNoticeSubscriberEmail : [ 'burnNoticeSubscriberId', ],\n deleteBurnNoticeSubscriberEmail : [ 'burnNoticeSubscriberId', ],\n createBurnNoticeSubscriberEmail : [ 'burnNoticeSubscriberId', 'email', ],\n // Meta\n setInactiveMetadata : [ 'key', 'activeOnly', ],\n})\n\n\nexport const BurnNoticeSubscriberTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = Object.freeze({\n activeBurnNoticeSubscriber : -1,\n isNewBurnNoticeSubscriber : false,\n inactiveData : {\n Phones: {\n activeOnly: true,\n },\n },\n})\n\nexport const getBurnNoticeSubscriber = (state, { burnNoticeSubscriberId, }) => {\n const newState = { ...state, }\n newState.activeBurnNoticeSubscriber = burnNoticeSubscriberId\n newState.isNewBurnNoticeSubscriber = false\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\n return newState\n}\n\nexport const newBurnNoticeSubscriber = (state) => {\n const newState = { ...state, }\n newState.isNewBurnNoticeSubscriber = true\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\n return newState\n}\n\nexport const activeBurnNoticeSubscriberId = (state, { burnNoticeSubscriberId, }) => {\n const newState = { ...state, }\n newState.activeBurnNoticeSubscriber = burnNoticeSubscriberId\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\n return newState\n}\n\nexport const deactivateBurnNoticeSubscriber = (state) => {\n const newState = { ...state, }\n newState.activeBurnNoticeSubscriber = -1\n newState.isNewBurnNoticeSubscriber = false\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\n return newState\n}\n\nconst setInactiveMetadata = (state, { key, activeOnly = true, }) => {\n const newState = { ...state, }\n if (!newState.inactiveData) {\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\n }\n newState.inactiveData[key] = {\n activeOnly,\n }\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.GET_BURN_NOTICE_SUBSCRIBER] : getBurnNoticeSubscriber,\n [Types.NEW_BURN_NOTICE_SUBSCRIBER] : newBurnNoticeSubscriber,\n [Types.ACTIVE_BURN_NOTICE_SUBSCRIBER_ID] : activeBurnNoticeSubscriberId,\n [Types.DEACTIVATE_BURN_NOTICE_SUBSCRIBER] : deactivateBurnNoticeSubscriber,\n [Types.SET_INACTIVE_METADATA] : setInactiveMetadata,\n})","import {\n createReducer,\n createActions,\n} from 'reduxsauce'\n\nimport BurnPermit from '../models/BurnPermit'\nimport { dateFormatter, getNow, } from '../utilities'\n\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\n\n/* ------------- Types and Action Creators ------------- */\n \nconst { Types, Creators, } = createActions({\n togglePermitMap : null,\n getMyBurnPermits : () => ({\n type : 'GET_MY_BURN_PERMITS',\n meta : {\n offline: {\n effect: {\n url: BURN_PERMIT_ENDPOINT,\n },\n commit : { type: 'SEARCH_BURN_PERMITS_SUCCESS', },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n closeDownloadModal : null,\n downloadBurnPermits : null,\n doneDownloadingBurnPermits : null,\n setDownloadStatus : [ 'target', 'status', ],\n resetDownloadStatus : null,\n})\n \nexport const BurnPermitListTypes = Types\nexport default Creators\n \n/* ------------- Initial State ------------- */\n \nexport const INITIAL_STATE = {\n isMapShowing : false,\n lastDownload : '',\n lastDownloadDuration : '',\n isDownloading : false,\n DownloadStatuses : {\n BurnPermitsDownloaded : null,\n StatusHistoryDownloaded : null,\n AreaInfoDownloaded : null,\n ApplicantInfoDownloaded : null,\n LocationInfoDownloaded : null,\n SiteInfoDownloaded : null,\n PileInfoDownloaded : null,\n FuelsInfoDownloaded : null,\n ConditionsDownloaded : null,\n MapDataDownloaded : null,\n },\n}\n \n/* ------------- Reducers ------------- */\n\nexport const togglePermitMap = (state) => {\n return { ...state, isMapShowing: !state.isMapShowing, }\n}\n\nexport const closeDownloadModal = (state) => {\n const newState = Object.assign({}, state)\n newState.isDownloading = false\n return newState\n}\n\nexport const downloadBurnPermits = (state) => {\n const newState = Object.assign({}, state)\n newState.isDownloading = true\n newState.lastDownloadRaw = new Date()\n return newState\n}\n\nexport const doneDownloadingBurnPermits = (state) => {\n const newState = Object.assign({}, state)\n newState.isDownloading = false\n const keys = Object.keys(newState.DownloadStatuses)\n keys.forEach(k => {\n newState.DownloadStatuses[k] = null\n })\n newState.lastDownloadFormatted = dateFormatter(newState.lastDownloadRaw, 'ddd MMM D, YYYY @ HH:mm:ss A')\n let duration = getNow().diff(newState.lastDownloadRaw, 'second')\n let seconds = duration, minutes = ''\n if (duration > 60) {\n seconds = duration % 60\n minutes = parseInt(duration / 60)\n minutes = `${minutes} minute${minutes > 1 ? 's' : ''} `\n }\n newState.lastDownloadDuration = `${minutes}${seconds} seconds`\n return newState\n}\n\nexport const resetDownloadStatus = (state) => {\n const newState = Object.assign({}, state)\n newState.BurnPermitsDownloaded = null\n const keys = Object.keys(newState.DownloadStatuses)\n keys.forEach(k => {\n newState.DownloadStatuses[k] = null\n })\n return newState\n}\n\nexport const setDownloadStatus = (state, { target, status, }) => {\n const newState = Object.assign({}, state)\n newState.DownloadStatuses[`${target}Downloaded`] = status\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n \nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.TOGGLE_PERMIT_MAP] : togglePermitMap,\n [Types.RESET_DOWNLOAD_STATUS] : resetDownloadStatus,\n [Types.SET_DOWNLOAD_STATUS] : setDownloadStatus,\n [Types.CLOSE_DOWNLOAD_MODAL] : closeDownloadModal,\n [Types.DOWNLOAD_BURN_PERMITS] : downloadBurnPermits,\n [Types.DONE_DOWNLOADING_BURN_PERMITS] : doneDownloadingBurnPermits,\n})","import { createReducer, createActions, } from 'reduxsauce'\r\n\r\nimport BurnPermitSearch from '../models/BurnPermitSearch'\r\n \r\n/* ------------- Types and Action Creators ------------- */\r\n \r\nconst { Types, Creators, } = createActions({\r\n toggleLocation : null,\r\n toggleSearchMap : null,\r\n resetSearchParams : null,\r\n setSearchParam : [ 'param', ],\r\n searchBurnPermits : (searchParams) => ({\r\n type : 'SEARCH_BURN_PERMITS',\r\n searchParams,\r\n meta : {\r\n offline: {\r\n effect: {\r\n url: BurnPermitSearch.endpoint(searchParams),\r\n },\r\n commit : { type: 'SEARCH_BURN_PERMITS_SUCCESS', },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n }),\r\n searchBurnPermitsSuccess : [ 'payload', ],\r\n setDownloadingPermitsExport : [ 'isDownloading', ],\r\n downloadPermitsExport : [],\r\n resetPermitResults : [ 'message', ],\r\n})\r\n \r\nexport const BurnPermitSearchTypes = Types\r\nexport default Creators\r\n \r\n/* ------------- Initial State ------------- */\r\nexport const INITIAL_SEARCH_PARAMS = {\r\n PermitId : '',\r\n BurnPermitNumber : '',\r\n UnitName : '',\r\n AgentName : '',\r\n LandownerName : '',\r\n County : '',\r\n CountyId : '',\r\n LegalDesc : '',\r\n Address : '',\r\n AssignedTo : '',\r\n AssignedToId : '',\r\n MinAcres : '',\r\n MaxAcres : '',\r\n MinTons : '',\r\n MaxTons : '',\r\n ApplicationStatusId : '',\r\n PermitStatusId : '',\r\n Region : '',\r\n RegionId : '',\r\n BurnType : '',\r\n IsUGA : '',\r\n IsForestHealthExempt : '',\r\n}\r\n\r\nexport const INITIAL_STATE = {\r\n showMap : false,\r\n showLocation : false,\r\n defaultSearchParams : null,\r\n searchParams : { ...INITIAL_SEARCH_PARAMS, },\r\n searchWarning : 'Please enter one or more search parameters, then click Search.',\r\n isDownloadingExport : false,\r\n}\r\n \r\n/* ------------- Reducers ------------- */\r\n\r\nexport const setSearchParam = (state, { param, }) => {\r\n const newState = { ...state, }\r\n newState.searchParams = { ...newState.searchParams, ...param, }\r\n return newState\r\n}\r\n\r\nexport const searchBurnPermits = (state, { searchParams = {}, }) => {\r\n const newState = { ...state, searchParams: { ...searchParams, }, }\r\n const hasParamVals = Object.entries(newState.searchParams)\r\n .map(e => e[1])\r\n .reduce((acc, val) => acc.concat(val), [])\r\n .some(v => !!v)\r\n let searchWarning = ''\r\n if (!hasParamVals) {\r\n searchWarning = 'Because you did not enter search values, you will only receive the first 1,000 records.'\r\n }\r\n newState.searchWarning = searchWarning\r\n return newState\r\n}\r\n\r\nexport const resetSearchParams = (state) => {\r\n const newState = { ...state, }\r\n newState.searchParams = { ...INITIAL_SEARCH_PARAMS, ...newState.defaultSearchParams, }\r\n return newState\r\n}\r\n\r\nexport const toggleSearchMap = (state) => {\r\n const newState = Object.assign({}, state)\r\n newState.showMap = !newState.showMap\r\n return newState\r\n}\r\n\r\nexport const toggleLocation = (state) => {\r\n const newState = Object.assign({}, state)\r\n newState.showLocation = !newState.showLocation\r\n return newState\r\n}\r\n\r\nexport const setDownloadingPermitsExport = (state, { isDownloading, }) => {\r\n return { \r\n ...state, \r\n isDownloadingExport: isDownloading, \r\n } \r\n}\r\n\r\nexport const downloadPermitsExport = (state) => {\r\n return { \r\n ...state, \r\n isDownloadingExport: true, \r\n } \r\n}\r\n\r\nexport const resetPermitResults = (state, { message, }, ) => {\r\n if (message) {\r\n return {\r\n ...state,\r\n searchWarning: message,\r\n }\r\n }\r\n return state\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n \r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.TOGGLE_SEARCH_MAP] : toggleSearchMap,\r\n [Types.TOGGLE_LOCATION] : toggleLocation,\r\n [Types.SET_SEARCH_PARAM] : setSearchParam,\r\n [Types.SEARCH_BURN_PERMITS] : searchBurnPermits,\r\n [Types.RESET_SEARCH_PARAMS] : resetSearchParams,\r\n [Types.SET_DOWNLOADING_PERMITS_EXPORT] : setDownloadingPermitsExport,\r\n [Types.DOWNLOAD_PERMITS_EXPORT] : downloadPermitsExport,\r\n [Types.RESET_PERMIT_RESULTS] : resetPermitResults,\r\n})","import { createActions, createReducer, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getPermitConditions : [ 'burnPermitId', ],\n setPermitForConditions : [ 'burnPermitId', ],\n setActivePermitConditions : [ 'conditions', 'updateIssuedConditions', ],\n setContactConditions : [ 'contactObj', 'updateIssuedContacts', ],\n setConditionErrors : [ 'errors', ],\n clearConditionError : [ 'conditionId', ],\n})\n\nexport const PermitConditionTypes = Types\nexport default Creators\n\nconst INITIAL_STATE = {\n conditionErrors : {},\n burnPermitId : '',\n}\n\nconst setPermitForConditions = (state, { burnPermitId, }) => {\n const newState = { ...state, }\n newState.burnPermitId = burnPermitId || ''\n return newState\n}\n\nconst setConditionErrors = (state, { errors, }) => {\n const newState = { ...state, }\n newState.conditionErrors = errors || {}\n return newState\n}\n\nconst clearConditionError = (state, { conditionId, }) => {\n const newState = { ...state, }\n delete newState.conditionErrors[conditionId]\n return newState\n}\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.CLEAR_CONDITION_ERROR] : clearConditionError,\n [Types.SET_CONDITION_ERRORS] : setConditionErrors,\n [Types.SET_PERMIT_FOR_CONDITIONS] : setPermitForConditions,\n})","import { createReducer, createActions, } from 'reduxsauce'\r\nimport { removeItemFromArray, addItemToArray, } from '../utilities'\r\nimport BurnPermit from '../models/BurnPermit'\r\n\r\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\n\r\nconst { Types, Creators, } = createActions({\r\n // State actions\r\n activeBurnPermit : [ 'BurnPermitId', ],\r\n previousStep : null,\r\n nextStep : null,\r\n setActiveStep : [ 'StepId', ],\r\n savedAndNextStep : [ 'StepId', ],\r\n invalidStep : [ 'StepId', ],\r\n completedSteps : [ 'StepIds', ],\r\n permitFailedToLoad : null,\r\n resetPermitLoadFail : null,\r\n setConditionErrors : [ 'errors', ],\r\n // CRUD actions\r\n // These actions have listening sagas that are available for offline use\r\n createPermitApplication : null,\r\n createPermitApplicationRequest : (localId) => ({\r\n type : 'CREATE_PERMIT_APPLICATION_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : BURN_PERMIT_ENDPOINT,\r\n init : { method: 'POST', body: { localId, }, },\r\n },\r\n commit : { type: 'CREATE_PERMIT_APPLICATION_SUCCESS', localId, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n }),\r\n createPermitApplicationSuccess : [ 'payload', ],\r\n deleteApplication : [ 'permitId', ],\r\n deleteApplicationRequest : (permitId) => ({\r\n type : 'DELETE_APPLICATION_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : `${BURN_PERMIT_ENDPOINT}/${permitId}`,\r\n init : { method: 'DELETE', },\r\n },\r\n commit : { type: 'DELETE_APPLICATION_SUCCESS', permitId, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n }),\r\n deleteApplicationSuccess : [ 'payload', ],\r\n unlockApplication : [ 'permitId', ],\r\n // These actions have listening sagas and are only available for online use\r\n validatePermit : [ 'burnPermitId', ],\r\n getBurnPermit : [ 'burnPermitId', 'updateFee', ],\r\n getBurnPermitDetail : [ 'burnPermitId', 'burnPermitNumber', 'forceReload', ],\r\n agencySubmitBurnPermit : [ 'burnPermitId', ],\r\n getBurnPermitStatusHistory : [ 'burnPermitId', ],\r\n submitApplicationStatus : [ 'statusValues', ],\r\n deleteApplicationStatus : [ 'BurnPermitId', 'BurnPermitApplicationStatusXrefId', ],\r\n deletePermitStatus : [ 'BurnPermitId', 'BurnPermitStatusXrefId', ],\r\n updateSuspension : [ 'permitId', 'startDate', 'endDate', 'suspensionComment', ],\r\n clearSuspension : [ 'permitId', ],\r\n extendPermit : [ 'permitId', 'expirationDate', ],\r\n revokePermit : [ 'permitId', 'revokeData', ],\r\n undoRevocation : [ 'permitId', ],\r\n copyApplication : [ 'permitId', ],\r\n getPermitFiles : [ 'permitId', ],\r\n downloadPermitFile : [ 'permitId', 'fileName', 'documentId', ],\r\n downloadAllFiles : [ 'permitId', ],\r\n doneDownloadingFiles : null,\r\n deletePermitFile : [ 'permitId', 'documentId', ],\r\n uploadPermitFiles : [ 'permitId', 'files', 'createSignature', ],\r\n updateDocumentType : [ 'permitId', 'documentId', 'documentTypeId', 'uploadAnyway', ],\r\n clearDocTypeInfo : null,\r\n checkIfFilesAreAlreadyAttached : [ 'files', ],\r\n toggleApplicationSummary : null,\r\n})\r\n\r\nexport const BurnPermitFormTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nconst INITIAL_STATE = {\r\n activeBurnPermitId : null,\r\n searchParam : null,\r\n applications : {},\r\n permitFailedToLoad : false,\r\n conditionErrors : {},\r\n docTypeInfo : null,\r\n redirectToId : '',\r\n applicationSummaryIsShowing : false,\r\n isDownloadingFiles : false,\r\n}\r\n\r\nexport const baseAppState = {\r\n activeStep : 1,\r\n completedSteps : [],\r\n invalidSteps : [],\r\n shouldValidate : false,\r\n applicationSummaryIsShowing : false,\r\n}\r\n\r\n/* ------------- Reducers ------------- */\r\n\r\nconst validatePermit = (state, { burnPermitId, }) => {\r\n const newState = { ...state, }\r\n\r\n let app = newState.applications[burnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n\r\n app.shouldValidate = true\r\n \r\n newState.applications[burnPermitId] = app\r\n\r\n return newState\r\n}\r\n\r\nconst previousStep = (state) => {\r\n const newState = { ...state, }\r\n\r\n let app = newState.applications[newState.activeBurnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n\r\n const { activeStep, } = app\r\n // Steps are 1 based, so default to 2 so the subtraction does not go lower than 1\r\n app.activeStep = (activeStep > 0 ? activeStep : 2) - 1\r\n \r\n newState.applications[newState.activeBurnPermitId] = app\r\n\r\n return newState\r\n}\r\n\r\nconst nextStep = (state) => {\r\n const newState = { ...state, }\r\n \r\n let app = newState.applications[newState.activeBurnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n \r\n const { activeStep, } = app\r\n app.activeStep = (activeStep > 0 ? activeStep : 1) + 1\r\n \r\n newState.applications[newState.activeBurnPermitId] = app\r\n \r\n return newState\r\n}\r\n\r\nconst completedSteps = (state, { StepIds, }) => {\r\n const newState = { ...state, }\r\n\r\n let app = newState.applications[newState.activeBurnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n\r\n app.completedSteps = [ ...new Set(StepIds), ]\r\n \r\n newState.applications[newState.activeBurnPermitId] = app\r\n \r\n return newState\r\n}\r\n\r\nconst savedAndNextStep = (state, { StepId, }) => {\r\n const newState = { ...state, }\r\n\r\n let app = newState.applications[newState.activeBurnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n\r\n app.activeStep = app.activeStep + 1\r\n app.completedSteps = addItemToArray(app.completedSteps, StepId)\r\n app.invalidSteps = removeItemFromArray(app.invalidSteps, StepId)\r\n \r\n newState.applications[newState.activeBurnPermitId] = app\r\n \r\n return newState\r\n}\r\n\r\nconst setActiveStep = (state, { StepId, }) => {\r\n const newState = { ...state, }\r\n\r\n let app = newState.applications[newState.activeBurnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n\r\n app.activeStep = StepId > 1 ? StepId : 1\r\n\r\n newState.applications[newState.activeBurnPermitId] = app\r\n\r\n return newState\r\n}\r\n\r\nconst invalidStep = (state, { StepId, }) => {\r\n const newState = { ...state, }\r\n\r\n let app = newState.applications[newState.activeBurnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n\r\n app.invalidSteps = addItemToArray(app.invalidSteps, StepId)\r\n app.completedSteps = removeItemFromArray(app.completedSteps, StepId)\r\n\r\n newState.applications[newState.activeBurnPermitId] = app\r\n \r\n return newState\r\n}\r\n\r\nconst activeBurnPermit = (state, { BurnPermitId, }) => {\r\n const newState = { ...state, }\r\n \r\n BurnPermitId = parseInt(BurnPermitId)\r\n if (!isNaN(BurnPermitId)) {\r\n newState.activeBurnPermitId = BurnPermitId\r\n }\r\n else {\r\n newState.activeBurnPermitId = ''\r\n }\r\n\r\n newState.permitFailedToLoad = false\r\n if (!newState.applications[newState.activeBurnPermitId]) {\r\n newState.applications[newState.activeBurnPermitId] = { ...baseAppState, }\r\n newState.applications[newState.activeBurnPermitId].instructionsAcknowledged = true\r\n }\r\n\r\n newState.instructionStep = 0\r\n \r\n return newState\r\n}\r\n\r\nconst permitFailedToLoad = (state) => {\r\n const newState = { ...state, }\r\n newState.permitFailedToLoad = true\r\n return newState\r\n}\r\n\r\nconst updateDocumentType = (state, { permitId, documentId, documentTypeId, uploadAnyway = false, }) => {\r\n const newState = { ...state, }\r\n newState.docTypeInfo = { permitId, documentId, documentTypeId, uploadAnyway, }\r\n return newState\r\n}\r\n\r\nconst clearDocTypeInfo = (state) => {\r\n const newState = { ...state, }\r\n newState.docTypeInfo = null\r\n return newState\r\n}\r\n\r\nconst toggleApplicationSummary = state => {\r\n const newState = { ...state, }\r\n\r\n let app = newState.applications[newState.activeBurnPermitId]\r\n if (!app) {\r\n app = { ...baseAppState, }\r\n }\r\n app.applicationSummaryIsShowing = !app.applicationSummaryIsShowing\r\n \r\n newState.applications[newState.activeBurnPermitId] = app\r\n\r\n return newState\r\n}\r\n\r\nconst getBurnPermitDetail = state => {\r\n const newState = { ...state, }\r\n newState.isDownloadingFiles = false\r\n return newState\r\n}\r\n\r\nconst downloadAllFiles = state => {\r\n const newState = { ...state, }\r\n newState.isDownloadingFiles = true\r\n return newState\r\n}\r\n\r\nconst doneDownloadingFiles = state => {\r\n const newState = { ...state, }\r\n newState.isDownloadingFiles = false\r\n return newState\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.ACTIVE_BURN_PERMIT] : activeBurnPermit,\r\n [Types.PERMIT_FAILED_TO_LOAD] : permitFailedToLoad,\r\n [Types.UPDATE_DOCUMENT_TYPE] : updateDocumentType,\r\n [Types.CLEAR_DOC_TYPE_INFO] : clearDocTypeInfo,\r\n [Types.PREVIOUS_STEP] : previousStep,\r\n [Types.NEXT_STEP] : nextStep,\r\n [Types.SET_ACTIVE_STEP] : setActiveStep,\r\n [Types.SAVED_AND_NEXT_STEP] : savedAndNextStep,\r\n [Types.COMPLETED_STEPS] : completedSteps,\r\n [Types.INVALID_STEP] : invalidStep,\r\n [Types.VALIDATE_PERMIT] : validatePermit,\r\n [Types.TOGGLE_APPLICATION_SUMMARY] : toggleApplicationSummary,\r\n [Types.GET_BURN_PERMIT_DETAIL] : getBurnPermitDetail,\r\n [Types.DOWNLOAD_ALL_FILES] : downloadAllFiles,\r\n [Types.DONE_DOWNLOADING_FILES] : doneDownloadingFiles,\r\n})","import { createReducer, createActions, } from 'reduxsauce'\n \n/* ------------- Types and Action Creators ------------- */\n \nconst { Types, Creators, } = createActions({\n goToInstructionStep : [ 'step', 'burnPermitId', 'completedSteps', ],\n acknowledgedInstructions : null,\n completedInstructionSteps : [ 'burnPermitId', 'steps', ],\n})\n \nexport const BurnPermitInstructionsTypes = Types\nexport default Creators\n \n/* ------------- Initial State ------------- */\n \nexport const INITIAL_STATE = {\n instructionStep : 'Apply',\n instructionsAcknowledged : false,\n completedSteps : {},\n}\n \n/* ------------- Reducers ------------- */\nconst goToInstructionStep = (state, { step, burnPermitId, completedSteps, }) => {\n const newState = { ...state, }\n newState.instructionStep = step || 'Apply'\n if (parseInt(burnPermitId) > 0 && Array.isArray(completedSteps)) {\n if (('completedSteps' in newState) === false) {\n newState.completedSteps = {}\n }\n newState.completedSteps[burnPermitId] = [ ...new Set([ ...completedSteps, ]), ]\n }\n return newState\n}\n\nconst acknowledgedInstructions = (state) => {\n const newState = { ...state, }\n newState.instructionsAcknowledged = true \n return newState\n}\n\nconst completedInstructionSteps = (state, { burnPermitId, steps, }) => {\n const newState = { ...state, }\n if (('completedSteps' in newState) === false) {\n newState.completedSteps = {}\n }\n const completedSteps = 'completedSteps' in newState ? newState.completedSteps[burnPermitId] || []: []\n newState.completedSteps[burnPermitId] = [ ...new Set([ ...completedSteps, ...steps, ]), ]\n return newState\n}\n \n/* ------------- Hookup Reducers To Types ------------- */\n \nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.COMPLETED_INSTRUCTION_STEPS] : completedInstructionSteps,\n [Types.GO_TO_INSTRUCTION_STEP] : goToInstructionStep,\n [Types.ACKNOWLEDGED_INSTRUCTIONS] : acknowledgedInstructions,\n})","import { createActions, createReducer, } from 'reduxsauce'\r\nimport BurnPermitPileGroup from '../models/BurnPermitPileGroup'\r\n\r\nconst BURN_PERMIT_PILE_GROUP_ENDPOINT = BurnPermitPileGroup.endpoint()\r\n \r\n/* ------------- Types and Action Creators ------------- */\r\n \r\nconst { Types, Creators, } = createActions({\r\n getBurnPileGroup : [ 'BurnPermitPileGroupId', ],\r\n getBurnPileGroups : [ 'burnPermitId', ],\r\n createBurnPermitPileGroup : [ 'BurnPermitPileGroup', ],\r\n createBurnPermitPileGroupRequest : (BurnPermitPileGroup, showSuccess) => ({\r\n type : 'CREATE_BURN_PERMIT_PILE_GROUP_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : BURN_PERMIT_PILE_GROUP_ENDPOINT,\r\n init : { method: 'POST', body: { ...BurnPermitPileGroup, }, },\r\n },\r\n commit : { type: 'UPDATE_BURN_PERMIT_PILE_GROUP_SUCCESS', showSuccess, },\r\n rollback : { type: 'PILE_GROUP_REQUEST_FAILED', },\r\n },\r\n },\r\n }),\r\n updateBurnPermitPileGroup : [ 'BurnPermitPileGroup', ],\r\n updateBurnPermitPileGroupRequest : (BurnPermitPileGroup, showSuccess) => ({\r\n type : 'UPDATE_BURN_PERMIT_PILE_GROUP_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/${BurnPermitPileGroup.BurnPermitPileGroupId}/ForPermit/${BurnPermitPileGroup.BurnPermitId}`,\r\n init : { method: 'PUT', body: { ...BurnPermitPileGroup, }, },\r\n },\r\n commit : { type: 'UPDATE_BURN_PERMIT_PILE_GROUP_SUCCESS', showSuccess, },\r\n rollback : { type: 'PILE_GROUP_REQUEST_FAILED', },\r\n },\r\n },\r\n }),\r\n updateBurnPermitPileGroupSuccess : [ 'payload', ],\r\n deleteteBurnPermitPileGroup : [ 'BurnPermitPileGroupId', ],\r\n deleteBurnPermitPileGroupRequest : (BurnPermitPileGroupId, permitId, showSuccess) => ({\r\n type : 'DELETE_BURN_PERMIT_PILE_GROUP_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/${BurnPermitPileGroupId}/ForPermit/${permitId}`,\r\n init : { method: 'DELETE', },\r\n },\r\n commit : { type: 'DELETE_BURN_PERMIT_PILE_GROUP_SUCCESS', BurnPermitPileGroupId, showSuccess, },\r\n rollback : { type: 'PILE_GROUP_REQUEST_FAILED', },\r\n },\r\n },\r\n }),\r\n deleteBurnPermitPileGroupSuccess : [ 'payload', ],\r\n estimateConsumedTonnage : [ 'burnPermitId', ],\r\n addLocalPileGroup : null,\r\n editBurnPermitPileGroup : [ 'BurnPermitPileGroupId', ],\r\n deletePileGroup : [ 'BurnPermitPileGroupId', ],\r\n deleteLocalPileGroups : null,\r\n pileGroupRequestFailed : [ 'failed', ],\r\n uploadBatchPiles : [ 'permitId', 'files', ],\r\n deleteAllPileGroups : [ 'permitId', ],\r\n})\r\n\r\nexport const BurnPermitPileGroupTypes = Types\r\nexport default Creators\r\n\r\nexport const INITIAL_STATE = {\r\n EditBurnPermitPileGroupId : '',\r\n RequestFailed : false,\r\n}\r\n\r\nconst pileGroupRequestFailed = (state, { failed, }) => {\r\n return { ...state, RequestFailed: typeof failed === 'boolean' ? failed : true, }\r\n}\r\n\r\nconst editBurnPermitPileGroup = (state, { BurnPermitPileGroupId, }) => {\r\n return {\r\n ...state,\r\n EditBurnPermitPileGroupId : Number.isInteger(BurnPermitPileGroupId) && BurnPermitPileGroupId > 0 ? BurnPermitPileGroupId : '',\r\n RequestFailed : false,\r\n }\r\n}\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.PILE_GROUP_REQUEST_FAILED] : pileGroupRequestFailed,\r\n [Types.EDIT_BURN_PERMIT_PILE_GROUP] : editBurnPermitPileGroup,\r\n})","import {\n createReducer,\n createActions,\n} from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getBurnPermitSignatures : [ 'burnPermitId', ],\n signPermitApplication : [ 'burnPermitId', 'force', ],\n confirmApplicationSignature : [ 'burnPermitId', 'envelopeId', ],\n applicationSignatureConfirmed : [ 'burnPermitId', ],\n previewPermit : [ 'burnPermitId', ],\n signPermit : [ 'burnPermitId', 'validDate', 'expirationDate', ],\n reIssuePermit : [ 'burnPermitId', ],\n confirmPermitSignature : [ 'burnPermitId', 'envelopeId', ],\n permitSignatureConfirmed : [ 'burnPermitId', ],\n resetSignatureState : null,\n loadingDocuSignUrl : [ 'loading', ],\n gettingSignatures : [ 'getting', ],\n verifyingSignatures : [ 'verifying', ],\n docuSignSignatureEvent : [ 'event', ],\n signatureComplete : [ 'burnPermitId', ],\n signatureFailed : [ 'burnPermitId', 'error', 'enableForce', 'abandonedPermitApplicationId', ],\n acknowledgeSignatureSteps : [ 'processName', 'acknowledgedSteps', 'doNotShowAgain', ],\n})\n\nexport const BurnPermitSignatureTypes = Types\nexport default Creators\n\nexport const SignatureProcessTypes = {\n preview : 'preview',\n issue : 'issue',\n reissue : 'reissue',\n application : 'application',\n}\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = {\n applicationSignatureConfirmed : false,\n permitSignatureConfirmed : false,\n isLoadingDocuSignUrl : false,\n isGettingSignatures : false,\n isVerifyingSignatures : false,\n isReissuingPermit : false,\n burnPermitId : null,\n SignatureUrl : '',\n event : '',\n confirmingSignature : false,\n confirmationFailed : false,\n signatureError : '',\n enableForceSignature : false,\n abandonedPermitApplicationId : '',\n // These state values should persist between resets\n acknowledgedSteps : {\n [SignatureProcessTypes.preview] : false,\n [SignatureProcessTypes.issue] : false,\n [SignatureProcessTypes.reissue] : false,\n [SignatureProcessTypes.application] : false,\n },\n doNotShowSteps: {\n [SignatureProcessTypes.preview] : false,\n [SignatureProcessTypes.issue] : false,\n [SignatureProcessTypes.reissue] : false,\n [SignatureProcessTypes.application] : false,\n },\n}\n\n/* ------------- Reducers ------------- */\n\nexport const resetSignatureState = (state) => {\n return {\n ...INITIAL_STATE,\n // These state values should persist between resets\n acknowledgedSteps : state.acknowledgedSteps,\n doNotShowSteps : state.doNotShowSteps,\n }\n}\n\nexport const applicationSignatureConfirmed = (state, { burnPermitId, }) => {\n const newState = { ...state, }\n newState.burnPermitId = burnPermitId\n newState.applicationSignatureConfirmed = true\n newState.confirmingSignature = false\n return newState\n}\n\nexport const permitSignatureConfirmed = (state, { burnPermitId, }) => {\n const newState = { ...state, }\n newState.burnPermitId = burnPermitId\n newState.permitSignatureConfirmed = true\n newState.confirmingSignature = false\n return newState\n}\n\nconst loadingDocuSignUrl = (state, { loading, }) => {\n return { ...state, isLoadingDocuSignUrl: loading, }\n}\n\nconst gettingSignatures = (state, { getting, }) => {\n return { ...state, isGettingSignatures: getting, }\n}\n\nconst verifyingSignatures = (state, { verifying, }) => {\n return { ...state, isVerifyingSignatures: verifying, }\n}\n\nconst reIssuePermit = (state) => {\n return { ...state, isReissuingPermit: true, }\n}\n\nconst docuSignSignatureEvent = (state, { event, }) => ({\n ...state,\n event,\n confirmationFailed : false,\n confirmingSignature : true,\n})\n\nconst signatureComplete = (state, { burnPermitId, }) => ({\n ...state,\n burnPermitId,\n confirmingSignature: false,\n})\n\nconst signatureFailed = (state, { burnPermitId, error, enableForce, abandonedPermitApplicationId, }) => ({\n ...state,\n burnPermitId,\n confirmingSignature : false,\n confirmationFailed : true,\n signatureError : error,\n enableForceSignature : enableForce || false,\n isLoadingDocuSignUrl : false,\n abandonedPermitApplicationId,\n})\n\nconst acknowledgedSteps = (state, { processName, acknowledgedSteps, doNotShowAgain = false, }) => {\n const newState = { ...state, }\n if (newState.doNotShowSteps[processName] === false) {\n newState.acknowledgedSteps[processName] = acknowledgedSteps\n newState.doNotShowSteps[processName] = doNotShowAgain\n }\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.APPLICATION_SIGNATURE_CONFIRMED] : applicationSignatureConfirmed,\n [Types.PERMIT_SIGNATURE_CONFIRMED] : permitSignatureConfirmed,\n [Types.RESET_SIGNATURE_STATE] : resetSignatureState,\n [Types.LOADING_DOCU_SIGN_URL] : loadingDocuSignUrl,\n [Types.GETTING_SIGNATURES] : gettingSignatures,\n [Types.VERIFYING_SIGNATURES] : verifyingSignatures,\n [Types.RE_ISSUE_PERMIT] : reIssuePermit,\n [Types.DOCU_SIGN_SIGNATURE_EVENT] : docuSignSignatureEvent,\n [Types.SIGNATURE_COMPLETE] : signatureComplete,\n [Types.SIGNATURE_FAILED] : signatureFailed,\n [Types.ACKNOWLEDGE_SIGNATURE_STEPS] : acknowledgedSteps,\n})","import { createReducer, createActions, } from 'reduxsauce'\r\n \r\n/* ------------- Types and Action Creators ------------- */\r\nconst { Types, Creators, } = createActions({\r\n getOrders : null,\r\n getBurnPermitDetailForCart : [ 'burnPermitId', ],\r\n getBurnPermitOrderDetail : [ 'burnPermitOrderId', ],\r\n createBurnPermitOrder : [ 'BurnPermitIds', ],\r\n updateBurnPermitOrder : [ 'burnPermitOrder', ],\r\n setNewOrderId : [ 'burnPermitOrderId', ],\r\n updateOrderPermitIds : [ 'permitIds', ],\r\n removePermitFromOrder : [ 'orderId', 'permitId', ],\r\n deleteOrder : [ 'orderId', ],\r\n})\r\n \r\nexport const BurnPermitOrderTypes = Types\r\nexport default Creators\r\n \r\n/* ------------- Initial State ------------- */\r\nexport const INITIAL_STATE = {\r\n newBurnPermitOrderId: '',\r\n}\r\n\r\n/* ------------- Reducers ------------- */\r\n\r\nexport const setNewOrderId = (state, { burnPermitOrderId, }) => {\r\n const newState = { ...state, }\r\n newState.newBurnPermitOrderId = burnPermitOrderId\r\n return newState\r\n}\r\n\r\nexport const updateOrderPermitIds = (state, { permitIds, }) => {\r\n const newState = { ...state, }\r\n newState.createdOrderPermitIds = permitIds\r\n if (permitIds === null || permitIds.length === 0) {\r\n newState.newBurnPermitOrderId = ''\r\n }\r\n return newState\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.SET_NEW_ORDER_ID] : setNewOrderId,\r\n [Types.UPDATE_ORDER_PERMIT_IDS] : updateOrderPermitIds,\r\n})","import { createReducer, createActions, } from 'reduxsauce'\n\nimport { dateFormatter, } from '../utilities'\n\nimport BurnRequest from '../models/BurnRequest'\n\nconst BURN_REQUEST_ENDPOINT = BurnRequest.endpoint()\n\n/* ------------- Types and Action Creators ------------- */\n \nconst { Types, Creators, } = createActions({\n toggleMap : null,\n togglePbs : [ 'showPbs', ],\n getMyBurnRequests : () => ({\n type : 'GET_MY_BURN_REQUESTS',\n meta : {\n offline: {\n effect: {\n url: BURN_REQUEST_ENDPOINT,\n },\n commit : { type: 'SEARCH_BURN_REQUESTS_SUCCESS', },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n downloadRequests : null,\n closeRequestsDownloadModal : null,\n doneDownloadingBurnRequests : null,\n setRequestsDownloadStatus : [ 'target', 'status', ],\n resetRequestsDownloadStatus : null,\n})\n \nexport const BurnRequestListTypes = Types\nexport default Creators\n \n/* ------------- Initial State ------------- */\n \nexport const INITIAL_STATE = {\n isMapShowing : false,\n isPostBurnShowing : true,\n lastDownload : '',\n lastDownloadDuration : '',\n isDownloading : false,\n DownloadStatuses : {\n BurnPermitsDownloaded : null,\n BurnRequestsDownloaded : null,\n PostBurnsDownloaded : null,\n MapDataDownloaded : null,\n },\n}\n \n/* ------------- Reducers ------------- */\n\nconst toggleMap = (state) => {\n return { ...state, isMapShowing: !state.isMapShowing, }\n}\n\nconst togglePbs = (state, { showPbs, }) => {\n const newState = Object.assign({}, state)\n newState.isPostBurnShowing = showPbs\n return newState\n}\n\nconst closeDownloadModal = (state) => {\n const newState = Object.assign({}, state)\n newState.isDownloading = false\n return newState\n}\n\nconst downloadRequests = (state) => {\n const newState = Object.assign({}, state)\n newState.isDownloading = true\n newState.lastDownloadRaw = new Date()\n return newState\n}\n\nconst doneDownloadingBurnRequests = (state) => {\n const newState = Object.assign({}, state)\n newState.isDownloading = false\n newState.DownloadStatuses.BurnPermitsDownloaded = null\n newState.DownloadStatuses.BurnRequestsDownloaded = null\n newState.DownloadStatuses.PostBurnsDownloaded = null\n\n newState.lastDownloadFormatted = dateFormatter(newState.lastDownloadRaw, 'ddd MMM D, YYYY @ HH:mm:ss A')\n const now = new Date()\n let duration = dateFormatter(now).diff(newState.lastDownloadRaw, 'second')\n let seconds = duration, minutes = ''\n if (duration > 60) {\n seconds = duration % 60\n minutes = parseInt(duration / 60)\n minutes = `${minutes} minute${minutes > 1 ? 's' : ''} `\n }\n newState.lastDownloadDuration = `${minutes}${seconds} seconds`\n return newState\n}\n\nconst resetDownloadStatus = (state) => {\n const newState = Object.assign({}, state)\n newState.DownloadStatuses.BurnPermitsDownloaded = null\n newState.DownloadStatuses.BurnRequestsDownloaded = null\n newState.DownloadStatuses.PostBurnsDownloaded = null\n return newState\n}\n\nconst setDownloadStatus = (state, { target, status, }) => {\n const newState = Object.assign({}, state)\n newState.DownloadStatuses[`${target}Downloaded`] = status\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n \nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.TOGGLE_MAP] : toggleMap,\n [Types.TOGGLE_PBS] : togglePbs,\n [Types.DOWNLOAD_REQUESTS] : downloadRequests,\n [Types.RESET_REQUESTS_DOWNLOAD_STATUS] : resetDownloadStatus,\n [Types.SET_REQUESTS_DOWNLOAD_STATUS] : setDownloadStatus,\n [Types.CLOSE_REQUESTS_DOWNLOAD_MODAL] : closeDownloadModal,\n [Types.DONE_DOWNLOADING_BURN_REQUESTS] : doneDownloadingBurnRequests,\n})","import { createReducer, createActions, } from 'reduxsauce'\r\n\r\nimport BurnRequest from '../models/BurnRequest'\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\n\r\nconst { Types, Creators, } = createActions({\r\n resetRequestToInitial : null,\r\n updateRequestSearchParam : [ 'permitNumber', ],\r\n loadingBurnRequest : null,\r\n doneLoading : null,\r\n getBurnPermitInfo : [ 'burnPermitNumber', ],\r\n getBurnRequestInfo : (burnRequestId) => ({\r\n type : 'GET_BURN_REQUEST_INFO',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url: BurnRequest.endpoint(burnRequestId),\r\n },\r\n commit : { type: 'GET_BURN_REQUEST_SUCCESS', redirect: true, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n }),\r\n getBurnRequestSuccess : [ 'payload', ],\r\n getBurnRequestStatusHistory : [ 'burnRequestId', ],\r\n createRequest : [ 'burnRequestInfo', ],\r\n saveRequest : [ 'burnRequestInfo', ],\r\n submitRequest : [ 'burnRequestInfo', ],\r\n cancelBurnRequest : [ 'burnRequestInfo', ],\r\n cancelBurnRequestSuccess : [ 'payload', ],\r\n agencySubmitRequest : [ 'burnRequestInfo', ],\r\n deleteBurnRequest : [ 'id', ],\r\n deleteRequestStatus : [ 'burnRequestId', 'burnRequestStatusXrefId', ],\r\n submitRequestStatus : [ 'burnRequestStatus', ],\r\n overrideDecision : [ 'burnRequestId', 'comment', ],\r\n quickSubmitRequest : [ 'id', ],\r\n quickSubmitRequestFailure : [ 'id', ],\r\n quickSubmitRequestSuccess : [ 'id', ],\r\n})\r\n\r\nexport const BurnRequestDetailTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nexport const INITIAL_STATE = Object.freeze({\r\n searchParam : '',\r\n loadingBurnRequest : false,\r\n})\r\n\r\n/* ------------- Reducers ------------- */\r\n\r\nexport const resetRequestToInitial = () => {\r\n return INITIAL_STATE\r\n}\r\n\r\nexport const updateRequestSearchParam = (state, { permitNumber, }) => {\r\n return { ...state, searchParam: permitNumber, }\r\n}\r\n\r\nexport const loadingBurnRequest = (state) => {\r\n return { ...state, loadingBurnRequest: true, }\r\n}\r\n\r\nexport const doneLoading = (state) => {\r\n return { ...state, loadingBurnRequest: false, }\r\n}\r\n\r\n \r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.RESET_REQUEST_TO_INITIAL] : resetRequestToInitial,\r\n [Types.UPDATE_REQUEST_SEARCH_PARAM] : updateRequestSearchParam,\r\n [Types.LOADING_BURN_REQUEST] : loadingBurnRequest,\r\n [Types.DONE_LOADING] : doneLoading,\r\n})","import { createReducer, createActions, } from 'reduxsauce'\r\n\r\nimport BurnRequestSearch from '../models/BurnRequestSearch'\r\n \r\n/* ------------- Types and Action Creators ------------- */\r\n \r\nconst { Types, Creators, } = createActions({\r\n toggleRequestLocation : null,\r\n toggleRequestSearchMap : null,\r\n resetRequestSearchParams : null,\r\n setRequestSearchParam : [ 'param', ],\r\n searchBurnRequests : (searchParams) => ({\r\n type : 'SEARCH_BURN_REQUESTS',\r\n searchParams,\r\n meta : {\r\n offline: {\r\n effect: {\r\n url: BurnRequestSearch.endpoint(searchParams),\r\n },\r\n commit : { type: 'SEARCH_BURN_REQUESTS_SUCCESS', },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n }),\r\n searchBurnRequestsSuccess : [ 'payload', ],\r\n setDownloadingRequestsExport : [ 'isDownloading', ],\r\n downloadRequestsExport : [],\r\n resetRequestResults : [ 'message', ],\r\n})\r\n \r\nexport const BurnRequestSearchTypes = Types\r\nexport default Creators\r\n \r\n/* ------------- Initial State ------------- */\r\nexport const INITIAL_SEARCH_PARAMS = {\r\n BurnRequestId : '',\r\n BurnPermitId : '',\r\n BurnPermitNumber : '',\r\n RequestStatusId : '',\r\n BurnRequestStartDate : '',\r\n BurnRequestEndDate : '',\r\n PlannedIgnitionStartDate : '',\r\n PlannedIgnitionEndDate : '',\r\n AssignedTo : '',\r\n AssignedToId : '',\r\n UnitName : '',\r\n County : '',\r\n CountyId : '',\r\n LegalDesc : '',\r\n Address : '',\r\n MinAcres : '',\r\n MaxAcres : '',\r\n MinTons : '',\r\n MaxTons : '',\r\n Region : '',\r\n RegionId : '',\r\n BurnType : '',\r\n BurnTypeId : '',\r\n LandownerName : '',\r\n AgentName : '',\r\n HasPostBurn : '',\r\n MultiDayBurns : '',\r\n IsUGA : '',\r\n IsForestHealthExempt : '',\r\n}\r\n\r\nexport const INITIAL_STATE = {\r\n showMap : false,\r\n showLocation : false,\r\n defaultSearchParams : null,\r\n searchParams : { ...INITIAL_SEARCH_PARAMS, },\r\n searchWarning : 'Please enter one or more search parameters, then click Search.',\r\n isDownloadingExport : false,\r\n}\r\n \r\n/* ------------- Reducers ------------- */\r\n\r\nexport const setRequestSearchParam = (state, { param, }) => {\r\n const newState = { ...state, }\r\n newState.searchParams = { ...newState.searchParams, ...param, }\r\n return newState\r\n}\r\n\r\nexport const searchBurnRequests = (state, { searchParams, }) => {\r\n const newState = { ...state, searchParams: { ...searchParams, }, }\r\n const hasParamVals = Object.entries(newState.searchParams)\r\n .map(e => e[1])\r\n .reduce((acc, val) => acc.concat(val), [])\r\n .some(v => !!v)\r\n let searchWarning = ''\r\n if (!hasParamVals) {\r\n searchWarning = 'Because you did not enter search values, you will only receive the first 1,000 records.'\r\n }\r\n newState.searchWarning = searchWarning\r\n return newState\r\n}\r\n\r\nexport const resetRequestSearchParams = (state) => {\r\n const newState = { ...state, }\r\n newState.searchParams = { ...INITIAL_SEARCH_PARAMS, ...newState.defaultSearchParams, }\r\n return newState\r\n}\r\n\r\nexport const toggleRequestSearchMap = (state) => {\r\n const newState = Object.assign({}, state)\r\n newState.showMap = !newState.showMap\r\n return newState\r\n}\r\n\r\nexport const toggleRequestLocation = (state) => {\r\n const newState = Object.assign({}, state)\r\n newState.showLocation = !newState.showLocation\r\n return newState\r\n}\r\n\r\nexport const setDownloadingExport = (state, { isDownloading, }) => {\r\n return { \r\n ...state, \r\n isDownloadingExport: isDownloading, \r\n } \r\n}\r\n\r\nexport const downloadRequestsExport = (state) => {\r\n return { \r\n ...state, \r\n isDownloadingExport: true, \r\n } \r\n}\r\n\r\nexport const resetRequestResults = (state, { message, }) => {\r\n if (message) {\r\n return {\r\n ...state,\r\n searchWarning: message,\r\n }\r\n }\r\n return state\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n \r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.TOGGLE_REQUEST_SEARCH_MAP] : toggleRequestSearchMap,\r\n [Types.TOGGLE_REQUEST_LOCATION] : toggleRequestLocation,\r\n [Types.SET_REQUEST_SEARCH_PARAM] : setRequestSearchParam,\r\n [Types.SEARCH_BURN_REQUESTS] : searchBurnRequests,\r\n [Types.RESET_REQUEST_SEARCH_PARAMS] : resetRequestSearchParams,\r\n [Types.SET_DOWNLOADING_REQUESTS_EXPORT] : setDownloadingExport,\r\n [Types.DOWNLOAD_REQUESTS_EXPORT] : downloadRequestsExport,\r\n [Types.RESET_REQUEST_RESULTS] : resetRequestResults,\r\n})","import { createReducer, createActions, } from 'reduxsauce'\n\nimport BurnRequestSearch from '../models/BurnRequestSearch'\n\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n setStartEnd: (dataStartDate, dataEndDate, viewStartDate, viewEndDate, viewType) => ({\n type : 'SET_START_END',\n payload : { dataStartDate, dataEndDate, viewStartDate, viewEndDate, viewType, },\n meta : {\n offline: {\n effect: {\n url: BurnRequestSearch.endpoint({ PlannedIgnitionStartDate: dataStartDate, PlannedIgnitionEndDate: dataEndDate, }),\n },\n commit : { type: 'CALENDAR_EVENTS_SUCCESS', },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n calendarEventsSuccess : [ 'payload', ],\n setEvents : [ 'events', ],\n setView : [ 'view', ],\n})\n\nexport const CalendarTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = {\n startDate : new Date().toJSON(),\n endDate : '',\n events : [],\n viewType : 'dayGridMonth',\n}\n\nexport const setStartEnd = (state, { payload, }) => {\n const newState = { ...state, }\n newState.dataStartDate = payload.dataStartDate\n newState.dataEndDate = payload.dataEndDate\n newState.viewStartDate = payload.viewStartDate\n newState.viewEndDate = payload.viewEndDate\n newState.viewType = payload.viewType\n return newState\n}\n\nexport const setEvents = (state, { events, }) => {\n const newState = { ...state, }\n newState.events = [ ...events, ]\n return newState\n}\n\nexport const setView = (state, { view, }) => {\n const newState = { ...state, }\n newState.viewType = view\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.SET_START_END] : setStartEnd,\n [Types.SET_EVENTS] : setEvents,\n [Types.SET_VIEW] : setView,\n})","import { createReducer, createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getCustomerInteraction : [ 'id', ],\n newCustomerInteraction : [ 'interactionType', ],\n toggleCustomerInteractionMap : null,\n clearCustomerInteractionSearch : [ 'interactionType', ],\n upsertCustomerInteraction : [ 'values', ],\n upsertCustomerInteractionSuccess : [ 'id', ],\n getCustomerInteractionLookups : null,\n submitSmokeComplaint : [ 'values', ],\n createCustomerInteractionStatus : [ 'values', ],\n createCustomerInteractionStatusSuccess : null,\n associateBurn : [ 'values', ],\n getAssociatedBurns : [ 'id', ],\n associatedBurns : [ 'data', ],\n removeBurnAssociation : [ 'values', ],\n removeBurnAssociationSuccess : [ 'xrefId', ],\n smokePromptAcknowledged : null,\n tourCompleted : [ 'interactionType', ],\n searchCustomerInteractions : [ 'searchParams', ],\n searchCustomerInteractionsResults : [ 'results', ],\n mapDragEnd : [ 'dragEvt', ],\n showCustomerInteractionStatusForm : [ 'showForm', ],\n openModal : null,\n toggleFindBurnsForm : [ 'show', ],\n findAssociatedBurns : [ 'searchParams', ],\n findAssociatedBurnsResults : [ 'data', ],\n geocodeCustIntAddress : [ 'address', ],\n geocodeCustIntAddressSuccess : [ 'location', 'regionId', ],\n})\n\nexport const CustomerInteractionTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = {\n targetType : '',\n id : '',\n Smoke : {\n acknowledgedPrompt : false,\n tourCompleted : false,\n showMap : false,\n },\n mapState : {},\n searchParams : {},\n searchResults : {},\n status : {\n success : false,\n showForm : false,\n },\n associatedBurns: {\n showForm : false,\n data : [],\n searchResults : [],\n searchParams : {},\n },\n}\n\nconst mapDragEnd = (state, { dragEvt, }) => {\n const newState = { ...state, }\n if (!dragEvt || (!dragEvt.center && !dragEvt.zoom)) {\n return newState\n }\n const { center, zoom, } = dragEvt\n newState.mapState[newState.targetType] = { center, zoom, }\n return newState\n}\n\nconst geocodeCustIntAddressSuccess = (state, { location, regionId, }) => {\n const newState = { ...state, }\n if (!location || (!location.x && !location.y)) {\n return newState\n }\n const targetTypeMapState = {\n ...newState.mapState[newState.targetType],\n location,\n regionId,\n }\n newState.mapState[newState.targetType] = targetTypeMapState\n return newState\n}\n\nconst clearCustomerInteractionSearch = (state, { interactionType, }) => {\n const newState = { ...state, }\n interactionType = interactionType || newState.targetType\n newState.searchParams[interactionType] = {}\n newState.searchResults[interactionType] = []\n return newState\n}\n\nconst toggleCustomerInteractionMap = (state) => {\n const newState = { ...state, }\n const currMapState = { ...(newState.mapState[newState.targetType] || {}), }\n let { showMap, } = currMapState\n if (showMap === undefined || showMap === null) {\n showMap = false\n }\n newState.mapState[newState.targetType] = { ...currMapState, showMap: !showMap, }\n return newState\n}\n\nconst searchCustomerInteractions = (state, { searchParams, }) => {\n const newState = { ...state, }\n newState.searchParams = {\n [newState.targetType]: { ...searchParams, },\n }\n return newState\n}\n\nconst searchCustomerInteractionsResults = (state, { results, }) => {\n const newState = { ...state, }\n if (!newState.searchResults) {\n newState.searchResults = {}\n }\n newState.searchResults[newState.targetType] = [ ...results, ]\n return newState\n}\n\nconst newCustomerInteraction = (state, { interactionType, }) => {\n const newState = { ...state, }\n newState.targetType = interactionType\n newState.id = null\n newState.status = { ...INITIAL_STATE.status, }\n newState.associatedBurns = { ...INITIAL_STATE.associatedBurns, }\n newState.mapState = { ...INITIAL_STATE.mapState, }\n newState.searchParams = { ...INITIAL_STATE.searchParams, }\n newState.searchResults = { ...INITIAL_STATE.searchResults, }\n return newState\n}\n\nconst upsertCustomerInteractionSuccess = (state, { id, }) => {\n const newState = { ...state, }\n newState.id = id\n newState.mapState = {}\n return newState\n}\n\nconst createCustomerInteractionStatusSuccess = (state) => {\n const newState = { ...state, }\n newState.status.success = true\n return newState\n}\n\nconst showCustomerInteractionStatusForm = (state, { showForm, }) => {\n const newState = { ...state, }\n newState.status.showForm = showForm\n newState.status.success = false\n return newState\n}\n\nconst smokePromptAcknowledged = state => {\n const newState = { ...state, Smoke: { ...state.Smoke, }, }\n newState.Smoke.acknowledgedPrompt = true\n return newState\n}\n\nconst tourCompleted = (state, { interactionType, }) => {\n const newState = { ...state, [interactionType]: { ...state[interactionType], }, }\n newState[interactionType].tourCompleted = true\n return newState\n}\n\nexport const submitSmokeComplaint = (state) => {\n const newState = { ...state, Smoke: { ...state.Smoke, }, }\n newState.Smoke.acknowledgedPrompt = false\n return newState\n}\n\nconst openStatusModal = (state) => {\n const newState = { ...state, }\n newState.status.showForm = false\n newState.status.success = false\n return newState\n}\n\nconst toggleFindBurnsForm = (state, { show, }) => {\n const newState = { ...state, }\n newState.associatedBurns = { ...newState.associatedBurns, }\n newState.associatedBurns.showForm = show\n return newState\n}\n\nconst findAssociatedBurns = (state, { searchParams, }) => {\n const newState = { ...state, }\n newState.associatedBurns = { ...newState.associatedBurns, }\n newState.associatedBurns.searchParams = { ...searchParams, }\n return newState\n}\n\nconst findAssociatedBurnsResults = (state, { data, }) => {\n const newState = { ...state, }\n newState.associatedBurns = { ...newState.associatedBurns, }\n newState.associatedBurns.searchResults = [ ...data, ]\n return newState\n}\n\nconst associatedBurns = (state, { data, }) => {\n const newState = { ...state, }\n newState.associatedBurns = { ...newState.associatedBurns, }\n newState.associatedBurns.data = [ ...data, ]\n return newState\n}\n\nconst removeBurnAssociationSuccess = (state) => {\n const newState = { ...state, }\n newState.associatedBurns = { ...newState.associatedBurns, }\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.CLEAR_CUSTOMER_INTERACTION_SEARCH] : clearCustomerInteractionSearch,\n [Types.TOGGLE_CUSTOMER_INTERACTION_MAP] : toggleCustomerInteractionMap,\n [Types.SEARCH_CUSTOMER_INTERACTIONS] : searchCustomerInteractions,\n [Types.SEARCH_CUSTOMER_INTERACTIONS_RESULTS] : searchCustomerInteractionsResults,\n [Types.NEW_CUSTOMER_INTERACTION] : newCustomerInteraction,\n [Types.UPSERT_CUSTOMER_INTERACTION_SUCCESS] : upsertCustomerInteractionSuccess,\n [Types.CREATE_CUSTOMER_INTERACTION_STATUS_SUCCESS] : createCustomerInteractionStatusSuccess,\n [Types.SUBMIT_SMOKE_COMPLAINT] : submitSmokeComplaint,\n [Types.SMOKE_PROMPT_ACKNOWLEDGED] : smokePromptAcknowledged,\n [Types.TOUR_COMPLETED] : tourCompleted,\n [Types.MAP_DRAG_END] : mapDragEnd,\n [Types.OPEN_MODAL] : openStatusModal,\n [Types.SHOW_CUSTOMER_INTERACTION_STATUS_FORM] : showCustomerInteractionStatusForm,\n [Types.TOGGLE_FIND_BURNS_FORM] : toggleFindBurnsForm,\n [Types.FIND_ASSOCIATED_BURNS] : findAssociatedBurns,\n [Types.FIND_ASSOCIATED_BURNS_RESULTS] : findAssociatedBurnsResults,\n [Types.ASSOCIATED_BURNS] : associatedBurns,\n [Types.REMOVE_BURN_ASSOCIATION_SUCCESS] : removeBurnAssociationSuccess,\n [Types.GEOCODE_CUST_INT_ADDRESS_SUCCESS] : geocodeCustIntAddressSuccess,\n})\n","import { createReducer, createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getTileLinks : null,\n setTileLinks : [ 'links', ],\n getDashMsgs : null,\n setDashMsgs : [ 'messages', ],\n})\n\nexport const DashboardTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\n\nexport const INITIAL_STATE = {\n TileLinks: {\n AirQuality : [],\n BurnRestrictions : [],\n Helpful : [],\n Permit : [],\n Smoke : [],\n StateLaw : [],\n },\n Messages: {\n Alert : null,\n Warning : null,\n Info : null,\n },\n}\n\nexport const setMessages = (state, { messages, }) => {\n const newState = { ...state, }\n newState.Messages = messages\n return newState\n}\n\nexport const setTileLinks = (state, { links, }) => {\n const newState = { ...state, }\n newState.TileLinks = links\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.SET_TILE_LINKS] : setTileLinks,\n [Types.SET_DASH_MSGS] : setMessages,\n})","import {\n createReducer,\n createActions,\n} from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n // This is used to trigger the geocode request\n geocode : [ 'address', 'city', 'state', 'zip', 'singleLine', ],\n setIsGeocoding : null,\n getTRSExtent : [ 'section', 'township', 'range', 'rangeDir' , ],\n trsSuccess : [ 'result', ],\n geocodeSuccess : [ 'result', ],\n geocodeError : [ 'error', ],\n resetGeoCoordinate : null,\n clearGeocodeResult : null,\n clearTRSResult : null,\n getTrsByCoord : [ 'latitude', 'longitude', ],\n updateGeocodedLocation : [ 'region', 'trs', 'fireDistrict', 'county', 'address', ],\n geocodeLocationSection : [ 'latitude', 'longitude', ],\n resetGeolocatedLocation : null,\n geocodeAddressForm : [ 'address', 'city', 'state', 'zip', 'singleLine', ],\n})\n\nexport const GeoCoordinateTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\nexport const INITIAL_STATE = Object.freeze({\n GeocodeResult : null,\n IsGeocoding : false,\n TRSResult : null,\n TRSCodeResult : null,\n Error : null,\n LatLong : {\n Latitude : null,\n Longitude : null,\n },\n geocodedLocation : {},\n geocodingLocation : false,\n})\n\n/* ------------- Reducers ------------- */\n\nexport const resetGeoCoordinate = () => {\n return INITIAL_STATE\n}\n\nexport const setIsGeocoding = (state) => {\n const newState = Object.assign({}, state)\n newState.IsGeocoding = !newState.IsGeocoding\n return newState\n}\n\nexport const geocodeSuccess = (state, { result, }) => {\n const newState = Object.assign({}, state)\n newState.GeocodeResult = result\n newState.Error = null\n newState.IsGeocoding = false\n return newState\n}\n\nexport const trsSuccess = (state, { result, }) => {\n const newState = Object.assign({}, state)\n newState.TRSResult = result\n newState.Error = null\n newState.IsGeocoding = false\n return newState\n}\n\nexport const geocodeError = (state, { error, }) => {\n const newState = Object.assign({}, state)\n newState.Error = error\n newState.IsGeocoding = false\n return newState\n}\n\nexport const clearGeocodeResult = (state) => {\n const newState = Object.assign({}, state)\n newState.GeocodeResult = null\n return newState\n}\n\nexport const clearTRSResult = (state) => {\n const newState = Object.assign({}, state)\n newState.TRSResult = null\n return newState\n}\n\nexport const geocodeLocationSection = (state) => {\n return { ...state, geocodingLocation: true, }\n}\n\nexport const updateGeocodedLocation = (state, { region, trs, fireDistrict, county, address, }) => {\n const geocodedLocation = { ...state.geocodedLocation, }\n if (region) {\n geocodedLocation.region = region\n }\n if (trs) {\n geocodedLocation.trs = trs \n }\n if (fireDistrict) {\n geocodedLocation.fireDistrict = fireDistrict\n }\n if (county) {\n geocodedLocation.county = county\n }\n if (address) {\n geocodedLocation.address = address\n }\n\n return { ...state, geocodedLocation, geocodingLocation: false, }\n}\n\nexport const resetGeolocatedLocation = (state) => {\n return {\n ...state,\n geocodedLocation : INITIAL_STATE.geocodedLocation,\n geocodingLocation : false,\n }\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n \nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.RESET_GEO_COORDINATE] : resetGeoCoordinate,\n [Types.GEOCODE_SUCCESS] : geocodeSuccess,\n [Types.TRS_SUCCESS] : trsSuccess,\n [Types.GEOCODE_ERROR] : geocodeError,\n [Types.SET_IS_GEOCODING] : setIsGeocoding,\n [Types.CLEAR_GEOCODE_RESULT] : clearGeocodeResult,\n [Types.CLEAR_TRS_RESULT] : clearTRSResult,\n [Types.UPDATE_GEOCODED_LOCATION] : updateGeocodedLocation,\n [Types.GEOCODE_LOCATION_SECTION] : geocodeLocationSection,\n [Types.RESET_GEOLOCATED_LOCATION] : resetGeolocatedLocation,\n})\n","import {\r\n createReducer,\r\n createActions,\r\n} from 'reduxsauce'\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\nconst { Types, Creators, } = createActions({\r\n fileUploading : [ 'isUploading ', ],\r\n setSuccessfulUpload : [ 'successful', ],\r\n resetFileUploading : null,\r\n})\r\n\r\nexport const FileTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\nexport const INITIAL_STATE = {\r\n uploading : false,\r\n successfulUpload : false,\r\n}\r\n\r\n/* ------------- Reducers ------------- */\r\n\r\nexport const resetFileUploading = () => {\r\n return { ...INITIAL_STATE, }\r\n}\r\n\r\nexport const fileUploading = (state, { isUploading, }) => {\r\n const newState = Object.assign({}, state)\r\n newState.uploading = isUploading || false\r\n return newState\r\n}\r\n\r\nexport const setSuccessfulUpload = (state, { successful, }) => {\r\n const newState = Object.assign({}, state)\r\n newState.successfulUpload = successful || false\r\n return newState\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.FILE_UPLOADING] : fileUploading,\r\n [Types.SET_SUCCESSFUL_UPLOAD] : setSuccessfulUpload,\r\n [Types.RESET_FILE_UPLOADING] : resetFileUploading,\r\n})\r\n","import { createReducer, createActions, } from 'reduxsauce'\r\nimport { dateFormatter, } from '../utilities'\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\n\r\nconst { Types, Creators, } = createActions({\r\n lookupData : [ 'modelName', ],\r\n checkedLookupData : [ 'modelName', ],\r\n downloadLookupData : null,\r\n clearLookupChecks : null,\r\n failure : [ 'error', ],\r\n updateRecord : [ 'modelName', 'body', ],\r\n updateRecordRequest : (modelName, url, body, showSuccess) => ({\r\n type : 'UPDATE_RECORD_REQUEST',\r\n meta : {\r\n offline: {\r\n effect : { url, init: { method: 'PUT', body: { ...body, }, }, },\r\n commit : { type: 'API_SUCCESS', modelName, showSuccess, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n }),\r\n createRecord : [ 'modelName', 'body', 'endpoint', 'useResponseToCreate', 'shouldRedirect', ],\r\n clearError : [ 'id', ],\r\n clearAllErrors : null,\r\n logError : [ 'errorInfo', 'localState', ],\r\n generalMessage : [ 'title', 'message', ],\r\n clearGeneralMessage : [ 'id', ],\r\n clearAllGeneralMessages : null,\r\n offlineMessage : [ 'message', ],\r\n clearOfflineMessage : [ 'id', ],\r\n cancelSubmit : [ 'action_type', 'url', 'method', 'keyName', 'keyValue', ],\r\n apiSuccess : [ 'payload', ],\r\n apiFail : [ 'payload', ],\r\n donePreparingOffline : null,\r\n})\r\n\r\nexport const ApiTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nexport const INITIAL_STATE = {\r\n isLoading : false,\r\n requestError : [],\r\n lookupDataChecked : [],\r\n offlineMessages : [],\r\n generalMessages : [],\r\n preparingOffline : false,\r\n offlinePrepared : false,\r\n}\r\n \r\n/* ------------- Reducers ------------- */\r\n\r\nexport const failure = (state, { error, }) => {\r\n const newState = Object.assign({}, state)\r\n newState.isLoading = false\r\n const occurredAtDate = new Date()\r\n // Default to the current time in ticks\r\n let errorId = occurredAtDate.getTime()\r\n // If errors exist though, just add to the value to ensure\r\n // it doesn't clash with existing IDs\r\n if (newState.requestError.length) {\r\n errorId = newState.requestError.sort()[newState.requestError.length - 1].id + 1\r\n }\r\n let errorMessage = error || 'An unknown error occurred.'\r\n if (typeof error === 'object' && error !== null) {\r\n // caught errors\r\n if ('message' in error || 'error' in error) {\r\n errorMessage = error.message || error.error\r\n }\r\n // endpoint model validation failures or unhandled 500 errors\r\n else if ('title' in error) {\r\n errorMessage = error.title\r\n }\r\n // saga/other display errors\r\n else if (error != null) {\r\n errorMessage = error.toString()\r\n }\r\n else {\r\n errorMessage = 'An unknown error occurred.'\r\n }\r\n }\r\n newState.requestError = [\r\n ...newState.requestError,\r\n {\r\n id : errorId,\r\n message : errorMessage,\r\n occurredAt : dateFormatter(occurredAtDate, 'hh:mm:ss a'),\r\n },\r\n ]\r\n return newState\r\n}\r\n\r\nexport const clearError = (state, { id, }) => {\r\n const newState = Object.assign({}, state)\r\n const errorIdx = newState.requestError.map(e => e.id).indexOf(id)\r\n newState.requestError.splice(errorIdx, 1)\r\n newState.requestError = [ ...newState.requestError, ]\r\n return newState\r\n}\r\n\r\nexport const clearAllErrors = (state) => {\r\n const newState = Object.assign({}, state)\r\n newState.requestError = []\r\n return newState\r\n}\r\n\r\nexport const checkedLookupData = (state, { modelName, }) => {\r\n const newState = Object.assign({}, state)\r\n const setValues = [ ...new Set([ ...newState.lookupDataChecked, modelName, ]), ]\r\n newState.lookupDataChecked = setValues\r\n return newState\r\n}\r\n\r\nexport const clearLookupChecks = (state) => {\r\n const newState = Object.assign({}, state)\r\n newState.lookupDataChecked = []\r\n return newState\r\n}\r\n\r\nexport const offlineMessage = (state, { message, }) => {\r\n const newState = Object.assign({}, state)\r\n newState.isLoading = false\r\n const occurredAtDate = new Date()\r\n const id = occurredAtDate.getTime()\r\n newState.offlineMessages = [\r\n ...newState.offlineMessages,\r\n {\r\n id,\r\n message,\r\n occurredAt: dateFormatter(occurredAtDate, 'hh:mm:ss a'),\r\n },\r\n ]\r\n return newState\r\n}\r\n\r\nexport const clearOfflineMessage = (state, { id, }) => {\r\n const newState = Object.assign({}, state)\r\n const msgIdx = newState.offlineMessages.map(e => e.id).indexOf(id)\r\n newState.offlineMessages.splice(msgIdx, 1)\r\n newState.offlineMessages = [ ...newState.offlineMessages, ]\r\n return newState\r\n}\r\n\r\nexport const generalMessage = (state, { title, message, }) => {\r\n const newState = Object.assign({}, state)\r\n newState.isLoading = false\r\n const occurredAtDate = new Date()\r\n const id = occurredAtDate.getTime()\r\n newState.generalMessages = [\r\n ...(newState.generalMessages || []),\r\n {\r\n id,\r\n message,\r\n title,\r\n occurredAt: dateFormatter(occurredAtDate, 'hh:mm:ss a'),\r\n },\r\n ]\r\n return newState\r\n}\r\n\r\nexport const clearGeneralMessage = (state, { id, }) => {\r\n const newState = Object.assign({}, state)\r\n const msgIdx = newState.generalMessages.map(e => e.id).indexOf(id)\r\n newState.generalMessages.splice(msgIdx, 1)\r\n newState.generalMessages = [ ...newState.generalMessages, ]\r\n return newState\r\n}\r\n\r\nexport const clearAllGeneralMessages = (state) => {\r\n const newState = Object.assign({}, state)\r\n newState.generalMessages = []\r\n return newState\r\n}\r\n\r\nconst downloadLookupData = (state) => {\r\n return { ...state, preparingOffline: true, }\r\n}\r\n\r\nconst donePreparingOffline = (state) => {\r\n return { ...state, preparingOffline: false, offlinePrepared: true, }\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.FAILURE] : failure,\r\n [Types.CLEAR_ERROR] : clearError,\r\n [Types.CLEAR_ALL_ERRORS] : clearAllErrors,\r\n [Types.CHECKED_LOOKUP_DATA] : checkedLookupData,\r\n [Types.CLEAR_LOOKUP_CHECKS] : clearLookupChecks,\r\n [Types.OFFLINE_MESSAGE] : offlineMessage,\r\n [Types.CLEAR_OFFLINE_MESSAGE] : clearOfflineMessage,\r\n [Types.GENERAL_MESSAGE] : generalMessage,\r\n [Types.CLEAR_GENERAL_MESSAGE] : clearGeneralMessage,\r\n [Types.CLEAR_ALL_GENERAL_MESSAGES] : clearAllGeneralMessages,\r\n [Types.DOWNLOAD_LOOKUP_DATA] : downloadLookupData,\r\n [Types.DONE_PREPARING_OFFLINE] : donePreparingOffline,\r\n})","import {\n createReducer,\n createActions,\n} from 'reduxsauce'\n\n\nconst { Types, Creators, } = createActions({\n fetchAgencyData : [ 'agencyId', 'basicInfo', ],\n fetchAgencyDataForMerge : [ 'agencyId', ],\n getAllAgencies : null,\n createAgencyObject : [ 'model', 'modelType', 'agencyId', ],\n createAgencyObjects : [ 'agencyId', 'address', 'email', 'phone', ],\n updateAgencyObject : [ 'model', 'modelType', 'modelId', 'agencyId', ],\n createNewAgency : null,\n createAgency : [ 'model', ],\n deleteAgency : [ 'agencyId', ],\n updateAgency : [ 'model', 'agencyId', ],\n setAgencyId : [ 'agencyId', 'isNew', ],\n resetAgencyId : null,\n saved : [ 'saveType', ],\n saving : [ 'saveType', ],\n clearSaveState : [ 'saveType' , ],\n clearAllSaveState : null,\n verifyAgencyUser : [ 'agencyId', 'personAgencyXrefId', ],\n mergeAgencies : [ 'agency', 'mergedAgencyId', ],\n convertPersonToAgency : [ 'personId', ],\n mergePersonToAgency : [ 'personId', 'agencyId', ],\n})\n\nexport const AgencyTypes = Types\nexport default Creators\n\nexport const INITIAL_STATE = Object.freeze({\n agencyId : -1,\n personId : '',\n isNew : false,\n saving : {\n 'Phone' : false,\n 'Email' : false,\n 'Address' : false,\n 'Agency' : false,\n }, \n saved: {\n 'Phone' : false,\n 'Email' : false,\n 'Address' : false,\n 'Agency' : false,\n },\n})\n\nexport const saved = (state, { saveType, }) => {\n if (saveType === 'Phone' || saveType === 'Address' || saveType === 'Email' || saveType === 'Agency') {\n const newState = { ...state, }\n newState.saved = { ...state.saved, }\n newState.saving = { ...state.saving, }\n newState.saved[saveType] = true\n newState.saving[saveType] = false\n return newState\n }\n return state \n}\n\nexport const saving = (state, { saveType, }) => {\n if (saveType === 'Phone' || saveType === 'Address' || saveType === 'Email' || saveType === 'Agency') {\n const newState = { ...state, }\n newState.saved = { ...state.saved, }\n newState.saving = { ...state.saving, }\n newState.saved[saveType] = false\n newState.saving[saveType] = true\n return newState\n }\n return state\n}\n\nexport const clearSaveState = (state, { saveType, }) => {\n if (saveType === 'Phone' || saveType === 'Address' || saveType === 'Email' || saveType === 'Agency') {\n const newState = { ...state, }\n newState.saved = { ...state.saved, }\n newState.saving = { ...state.saving, }\n newState.saved[saveType] = false\n newState.saving[saveType] = false\n return newState\n }\n return state\n}\n\nexport const clearAllSaveState = (state) => {\n const newState = { ...state, }\n newState.saving = {\n 'Phone' : false,\n 'Email' : false,\n 'Address' : false,\n 'Agency' : false,\n }\n newState.saved = {\n 'Phone' : false,\n 'Email' : false,\n 'Address' : false,\n 'Agency' : false,\n }\n newState.isNew = false\n return newState \n}\n\nexport const fetchAgencyData = (state, { agencyId, }) => {\n const newState = { ...state, }\n newState.agencyId = agencyId\n return newState\n}\n\nexport const setAgencyId = (state, { agencyId, isNew, }) => {\n const newState = { ...state, }\n newState.agencyId = agencyId\n newState.isNew = isNew || false\n return newState\n}\n\nexport const resetAgencyId = (state, ) => {\n const newState = { ...state, }\n newState.agencyId = -1\n newState.isNew = false\n newState.personId = ''\n return newState\n}\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.FETCH_AGENCY_DATA] : fetchAgencyData,\n [Types.FETCH_AGENCY_DATA_FOR_MERGE] : fetchAgencyData,\n [Types.SET_AGENCY_ID] : setAgencyId,\n [Types.RESET_AGENCY_ID] : resetAgencyId,\n [Types.SAVING] : saving,\n [Types.SAVED] : saved,\n [Types.CLEAR_SAVE_STATE] : clearSaveState,\n [Types.CLEAR_ALL_SAVE_STATE] : clearAllSaveState,\n})","import { createReducer, createActions, } from 'reduxsauce'\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\nconst { Types, Creators, } = createActions({\r\n // for the container\r\n activePersonId : [ 'personId', ],\r\n deactivatePerson : null,\r\n // data loading\r\n getAllPeople : [ 'forceRefreshFromServer', ],\r\n getAllLandowners : null,\r\n getAllAgents : null,\r\n getPerson : [ 'personId', 'permitAndRequestSearch', ],\r\n getLandownerInfo : [ 'personId', ],\r\n getAgentInfo : [ 'personId', ],\r\n getPersonLookupData : null,\r\n newPerson : null,\r\n createPerson : [ 'person', 'email', ],\r\n updatePerson : [ 'person', ],\r\n getAssignableUsers : null,\r\n applicationUsersSuccess : [ 'payload', ],\r\n // Phone numbers\r\n getAgentPhones : [ 'personId', ],\r\n createLocalPhoneForPerson : [ 'personId', ],\r\n createPersonPhone : [ 'personId', 'phone', ],\r\n deletePersonPhone : [ 'personId', 'phoneId', ],\r\n // Addresses\r\n getAgentAddresses : [ 'personId', ],\r\n createLocalAddressForPerson : [ 'personId', ],\r\n createPersonAddress : [ 'personId', 'address', ],\r\n deletePersonAddress : [ 'personId', 'addressId', ],\r\n // Email\r\n getAgentEmail : [ 'personId', ],\r\n deletePersonEmail : [ 'personId', ],\r\n createPersonEmail : [ 'personId', 'email', ],\r\n // Region\r\n updatePersonRegion : [ 'personId', 'regionId', 'makesDecisions', ],\r\n setPersonRegion : [ 'personId', 'regionId', 'makesDecisions', ],\r\n mergePeople : [ 'person', 'mergedPersonId', ],\r\n getDataForPeopleMerge : null,\r\n getPersonDataForMerge : [ 'personId', ],\r\n getUnsubmittedRequests : [ 'personId', ],\r\n setUnsubmittedRequests : [ 'requests', ],\r\n setInactiveMetadata : [ 'key', 'activeOnly', ],\r\n})\r\n\r\n\r\nexport const PersonTypes = Types\r\nexport default Creators\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nexport const INITIAL_STATE = Object.freeze({\r\n activePerson : -1,\r\n isNewPerson : false,\r\n inactiveData : {\r\n Addresses: {\r\n activeOnly: true,\r\n },\r\n Phones: {\r\n activeOnly: true,\r\n },\r\n },\r\n})\r\n\r\nexport const getPerson = (state, { personId, }) => {\r\n const newState = { ...state, }\r\n newState.activePerson = personId\r\n newState.isNewPerson = false\r\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\r\n return newState\r\n}\r\n\r\nexport const newPerson = (state) => {\r\n const newState = { ...state, }\r\n newState.isNewPerson = true\r\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\r\n return newState\r\n}\r\n\r\nexport const activePersonId = (state, { personId, }) => {\r\n const newState = { ...state, }\r\n newState.activePerson = personId\r\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\r\n return newState\r\n}\r\n\r\nexport const deactivatePerson = (state) => {\r\n const newState = { ...state, }\r\n newState.activePerson = -1\r\n newState.isNewPerson = false\r\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\r\n return newState\r\n}\r\n\r\nexport const setUnsubmittedRequests = (state, { requests = null, }) => {\r\n const newState = { ...state, }\r\n newState.burnRequestsPrompts = requests\r\n return newState\r\n}\r\n\r\nconst setInactiveMetadata = (state, { key, activeOnly = true, }) => {\r\n const newState = { ...state, }\r\n if (!newState.inactiveData) {\r\n newState.inactiveData = { ...INITIAL_STATE.inactiveData, }\r\n }\r\n newState.inactiveData[key] = {\r\n activeOnly,\r\n }\r\n return newState\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.GET_PERSON] : getPerson,\r\n [Types.NEW_PERSON] : newPerson,\r\n [Types.ACTIVE_PERSON_ID] : activePersonId,\r\n [Types.DEACTIVATE_PERSON] : deactivatePerson,\r\n [Types.SET_UNSUBMITTED_REQUESTS] : setUnsubmittedRequests,\r\n [Types.SET_INACTIVE_METADATA] : setInactiveMetadata,\r\n})","import { createReducer, createActions, } from 'reduxsauce'\r\n \r\n/* ------------- Types and Action Creators ------------- */\r\nconst { Types, Creators, } = createActions({\r\n userFetchStart : null,\r\n userFetchEnd : null,\r\n loginReceived : [ 'token', ],\r\n loginError : [ 'error', ],\r\n logout : null,\r\n destroyTokenAndResetState : null,\r\n userInfoRequest : null,\r\n userInfoSuccess : [ 'personId', 'userName', ],\r\n userInfoError : [ 'error', ],\r\n setGroups : [ 'groups', ],\r\n checkAgentVerification : null,\r\n updateUserAgencyStatus : [ 'isVerifiedAgent', ],\r\n toggleNetworkNotifications : null,\r\n checkTokenExpiration : null,\r\n})\r\n\r\nexport const UserTypes = Types\r\nexport default Creators\r\n\r\nexport const INITIAL_STATE = {\r\n isAuthenticated : false,\r\n isFetching : false,\r\n errorMessage : '',\r\n token : null,\r\n personId : -1,\r\n userName : '',\r\n groups : [],\r\n isVerifiedAgent : false,\r\n // Default this to false\r\n // Enable it programmatically only if the user installs the app\r\n networkNotificationsEnabled : false,\r\n}\r\n \r\n/* ------------- Reducers ------------- */\r\nexport const isFetching = (state) => {\r\n const newState = { ...state, }\r\n newState.isFetching = true\r\n return newState\r\n}\r\n\r\nexport const doneFetching = (state) => {\r\n const newState = { ...state, }\r\n newState.isFetching = false\r\n return newState\r\n}\r\n\r\nexport const toggleNetworkNotifications = (state) => {\r\n const newState = { ...state, }\r\n newState.networkNotificationsEnabled = !newState.networkNotificationsEnabled\r\n return newState\r\n}\r\n\r\n/**\r\n * Add groups to User state\r\n * @param {Object} state \r\n * @param {Object} action - The login request response\r\n * @param {string[]} action.groups - Array of group names\r\n */\r\nexport const setGroups = (state, { groups, }) => {\r\n if (!groups || !Array.isArray(groups)){\r\n return state\r\n }\r\n const newState = { ...state, }\r\n newState.groups = groups\r\n return newState\r\n}\r\n\r\n/**\r\n * Add JWT to User state and update flags\r\n * @param {Object} state \r\n * @param {Object} action - The login request response\r\n * @param {string} action.token - The user's auth token\r\n */\r\nexport const loginReceived = (state, action) => {\r\n const newState = { ...state, }\r\n newState.isFetching = true\r\n newState.isAuthenticated = !!action.token\r\n newState.token = action.token\r\n newState.errorMessage = ''\r\n return newState\r\n}\r\n\r\n/**\r\n * Reset user state and clear stored token\r\n * @param {Object} [state]\r\n */\r\n// eslint-disable-next-line no-unused-vars\r\nexport const destroyTokenAndResetState = (state) => {\r\n return INITIAL_STATE\r\n}\r\n\r\nexport const userInfoSuccess = (state, { personId, userName, }) => {\r\n const newState = { ...state, }\r\n newState.personId = personId\r\n newState.userName = userName\r\n return newState\r\n}\r\n\r\nexport const updateAgencyStatus = (state, { isVerifiedAgent, }) => {\r\n const newState = { ...state, }\r\n newState.isVerifiedAgent = isVerifiedAgent\r\n return newState\r\n}\r\n\r\nexport const userInfoError = (state, { error, }) => {\r\n const newState = { ...state, }\r\n newState.errorMessage = error\r\n newState.personId = -1\r\n newState.userName = ''\r\n newState.token = null\r\n newState.isAuthenticated = false\r\n return newState\r\n}\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n [Types.USER_FETCH_START] : isFetching,\r\n [Types.USER_FETCH_END] : doneFetching,\r\n [Types.LOGIN_RECEIVED] : loginReceived,\r\n [Types.DESTROY_TOKEN_AND_RESET_STATE] : destroyTokenAndResetState,\r\n [Types.USER_INFO_SUCCESS] : userInfoSuccess,\r\n [Types.USER_INFO_ERROR] : userInfoError,\r\n [Types.SET_GROUPS] : setGroups,\r\n [Types.UPDATE_USER_AGENCY_STATUS] : updateAgencyStatus,\r\n [Types.TOGGLE_NETWORK_NOTIFICATIONS] : toggleNetworkNotifications,\r\n})","import { createReducer, createActions, } from 'reduxsauce'\n\nimport PostBurn from '../models/PostBurn'\nimport BurnRequest from '../models/BurnRequest'\n\nconst POST_BURN_ENDPOINT = PostBurn.endpoint()\n\n/* ------------- Types and Action Creators ------------- */\nconst { Types, Creators, } = createActions({\n // get by burn request\n getPostBurnsByRequestId: burnRequestId => ({\n type : 'GET_POST_BURNS_BY_REQUEST_ID',\n meta : {\n offline: {\n effect : { url: BurnRequest.postBurnEndpoint({ burnRequestId, }), },\n commit : { type: 'GET_POST_BURNS_BY_REQUEST_ID_SUCCESS', burnRequestId, },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n getPostBurnsByRequestIdSuccess : [ 'payload', ],\n // get by post burn id\n getPostBurnById : postBurnId => ({\n type : 'GET_POST_BURN_BY_ID',\n meta : {\n offline: {\n effect : { url: PostBurn.endpoint(postBurnId), },\n commit : { type: 'GET_POST_BURN_BY_ID_SUCCESS', postBurnId, },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n getPostBurnByIdSuccess : [ 'payload', ],\n // get post burns by permit\n getPostBurnsByPermit : [ 'permitId', 'permitNumber', ],\n // create actions\n createPostBurn : [ 'postBurnObj', ],\n createPostBurnRequest : (postBurnObj) => ({\n type : 'CREATE_POST_BURN_REQUEST',\n meta : {\n offline: {\n effect: {\n url : POST_BURN_ENDPOINT,\n init : {\n method : 'POST',\n body : { ...postBurnObj, },\n },\n },\n commit : { type: 'POST_BURN_REQUEST_SUCCESS', },\n rollback : { type: 'POST_BURN_REQUEST_FAIL', },\n },\n },\n }),\n // update actions\n updatePostBurn : [ 'postBurnId', 'postBurnObj', ],\n updatePostBurnRequest : (postBurnId, postBurnObj) => ({\n type : 'UPDATE_POST_BURN_REQUEST',\n payload : { ...postBurnObj, },\n meta : {\n offline: {\n effect: {\n url : PostBurn.endpoint(postBurnId),\n init : {\n method : 'PUT',\n body : { ...postBurnObj, },\n },\n },\n commit : { type: 'POST_BURN_REQUEST_SUCCESS', },\n rollback : { type: 'POST_BURN_REQUEST_FAIL', },\n },\n },\n }),\n // create/update actions\n postBurnRequestSuccess : [ 'payload', ],\n postBurnRequestFail : [ 'payload', ],\n // offline queuing\n cancelPostBurnSubmit : [ 'id', ],\n postBurnSubmitted : [ 'PostBurnId', ],\n submittingPostBurns : [ 'PostBurnId', ],\n // form setting actions\n setPostBurnRequestId : [ 'id', ],\n postBurnUseRequest : [ 'useRequest', ],\n setPostBurnPermitId : [ 'id', ],\n setPostBurnPermitByNumber : [ 'number', ],\n setPostBurnId : [ 'id', ],\n initializePostBurnForm : [ 'burnPermitId', 'burnRequestId', 'postBurnId', ],\n // loading indicators\n postBurnLoadingComplete : null,\n postBurnLoading : null,\n // post burn prompt actions\n setPostBurnPrompt : [ 'promptObjs', ],\n clearPostBurnPrompt : null,\n getPbPromptsForPermit : [ 'id', ],\n getPbPromptsForUser : null,\n})\n\nexport const PostBurnTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\nexport const INITIAL_STATE = Object.freeze({\n ActiveRequestId : -1,\n ActivePermitId : -1,\n ActivePostBurnId : -1,\n PostBurnIsLoading : false,\n postBurnPrompt : [],\n SubmittingPostBurns : [],\n PostBurnUsesRequest : true,\n})\n\n/* ------------- Reducers ------------- */\nexport const initializePostBurnForm = (state, action) => {\n const { burnPermitId, burnRequestId, postBurnId, } = action\n const newState = Object.assign({}, state)\n newState.PostBurnUsesRequest = true\n newState.ActiveRequestId = (!isNaN(burnRequestId)) ? parseInt(burnRequestId) : -1\n newState.ActivePermitId = (!isNaN(burnPermitId)) ? parseInt(burnPermitId) : -1\n newState.ActivePostBurnId = (!isNaN(postBurnId)) ? parseInt(postBurnId) : -1\n return newState\n}\n\n\nexport const setPostBurnId = (state, { id, }) => {\n const newState = Object.assign({}, state)\n if (isNaN(id) || (state.ActivePostBurnId === id)) {\n return state\n }\n newState.ActivePostBurnId = parseInt(id)\n return newState\n}\n\nexport const setPostBurnRequestId = (state, { id, }) => {\n const newState = Object.assign({}, state)\n if (isNaN(id) || (state.ActiveRequestId === id)) {\n if (state.PostBurnUsesRequest === true) {\n return state\n }\n newState.PostBurnUsesRequest = true\n return newState\n }\n newState.PostBurnUsesRequest = true\n newState.ActiveRequestId = parseInt(id)\n return newState\n}\n\nexport const setPostBurnRequestUse = (state, { useRequest, }) => {\n const newState = Object.assign({}, state)\n if (useRequest === true){\n newState.PostBurnUsesRequest = true\n } else {\n newState.PostBurnUsesRequest = false\n newState.ActiveRequestId = -1\n }\n return newState\n}\n\nexport const setPostBurnPermitId = (state, { id, }) => {\n const newState = Object.assign({}, state)\n if (isNaN(id) || (state.ActivePermitId === id)) {\n return state\n }\n newState.ActivePermitId = parseInt(id)\n return newState\n}\n\nexport const postBurnSubmitted = (state, { PostBurnId, }) => {\n const newState = Object.assign({}, state)\n const idIdx = newState.SubmittingPostBurns.indexOf(PostBurnId)\n if (idIdx > -1) {\n newState.SubmittingPostBurns.splice(idIdx, 1)\n return newState\n }\n return state\n}\n\nexport const cancelPostBurnSubmit = (state, { id, }) => {\n const newState = Object.assign({}, state)\n const idIdx = newState.SubmittingPostBurns.indexOf(id)\n if (idIdx > -1) {\n newState.SubmittingPostBurns.splice(idIdx, 1)\n }\n return newState\n}\n\nexport const submittingPostBurns = (state, { PostBurnId, }) => {\n const newState = Object.assign({}, state)\n const idIdx = newState.SubmittingPostBurns.indexOf(PostBurnId)\n if (idIdx === -1) {\n newState.SubmittingPostBurns.push(PostBurnId)\n }\n return newState\n}\n\nexport const postBurnLoading = (state) => {\n const newState = Object.assign({}, state)\n newState.PostBurnIsLoading = true\n return newState\n}\n\nexport const postBurnLoadingComplete = (state) => {\n const newState = Object.assign({}, state)\n newState.PostBurnIsLoading = false\n return newState\n}\n\nexport const setPostBurnPrompt = (state, { promptObjs, }) => {\n const newState = Object.assign({}, state)\n newState.postBurnPrompt = promptObjs\n return newState\n}\n\nexport const clearPostBurnPrompt = (state) => {\n const newState = Object.assign({}, state)\n newState.postBurnPrompt = []\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.SET_POST_BURN_PERMIT_ID] : setPostBurnPermitId,\n [Types.SET_POST_BURN_REQUEST_ID] : setPostBurnRequestId,\n [Types.SET_POST_BURN_ID] : setPostBurnId,\n [Types.POST_BURN_LOADING] : postBurnLoading,\n [Types.POST_BURN_LOADING_COMPLETE] : postBurnLoadingComplete,\n [Types.SET_POST_BURN_PROMPT] : setPostBurnPrompt,\n [Types.CLEAR_POST_BURN_PROMPT] : clearPostBurnPrompt,\n [Types.CANCEL_POST_BURN_SUBMIT] : cancelPostBurnSubmit,\n [Types.SUBMITTING_POST_BURNS] : submittingPostBurns,\n [Types.POST_BURN_SUBMITTED] : postBurnSubmitted,\n [Types.POST_BURN_USE_REQUEST] : setPostBurnRequestUse,\n [Types.INITIALIZE_POST_BURN_FORM] : initializePostBurnForm,\n})","import { createReducer, createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getReports : null,\n reportsDoneLoading : null,\n setReports : [ 'reports', ],\n downloadReport : [ 'reportPath', 'format', ],\n})\n\nexport const ReportTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = {\n reportsLoading : false,\n reports : [],\n}\n\nexport const getReports = (state) => {\n const newState = Object.assign({}, state)\n newState.reportsLoading = true\n return newState\n}\n\nexport const reportsDoneLoading = (state) => {\n const newState = Object.assign({}, state)\n newState.reportsLoading = false\n return newState\n}\n\nexport const setReports = (state, { reports, }) => {\n const newState = Object.assign({}, state)\n newState.reports = [ ...new Set(reports), ]\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.GET_REPORTS] : getReports,\n [Types.SET_REPORTS] : setReports,\n [Types.REPORTS_DONE_LOADING] : reportsDoneLoading,\n})","import { createReducer, createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getRules : null,\n updateRule : [ 'id', 'payload', ],\n rulesLoading : null,\n rulesLoaded : null,\n \n ruleUpdating : [ 'id', ],\n ruleUpdated : [ 'id', ],\n ruleUpdateFailed : [ 'id', ],\n \n resetRuleLoadState: [ 'id', ],\n})\n\nexport const RuleTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = {\n rulesLoading : false,\n ruleUpdating : [],\n ruleUpdated : [],\n ruleUpdateFailed : [],\n}\n\nexport const rulesLoading = state => {\n const newState = Object.assign({}, state)\n newState.rulesLoading = true\n return newState\n}\n\nexport const rulesLoaded = state => { \n const newState = Object.assign({}, state)\n newState.rulesLoading = false\n return newState\n}\n\nexport const ruleUpdating = (state, { id, }) => {\n const newState = Object.assign({}, state)\n if (!newState.ruleUpdating.includes(id)) {\n newState.ruleUpdating = newState.ruleUpdating.concat(id)\n }\n newState.ruleUpdated = newState.ruleUpdated.filter(x => x !== id)\n newState.ruleUpdateFailed = newState.ruleUpdateFailed.filter(x => x !== id)\n return newState\n}\n\nexport const ruleUpdated = (state, { id, }) => {\n const newState = Object.assign({}, state)\n if (!newState.ruleUpdated.includes(id)) {\n newState.ruleUpdated = newState.ruleUpdated.concat(id)\n }\n newState.ruleUpdating = newState.ruleUpdating.filter(x => x !== id)\n newState.ruleUpdateFailed = newState.ruleUpdateFailed.filter(x => x !== id)\n return newState\n}\n\nexport const ruleUpdateFailed = (state, { id, }) => {\n const newState = Object.assign({}, state)\n if (!newState.ruleUpdateFailed.includes(id)) {\n newState.ruleUpdateFailed = newState.ruleUpdateFailed.concat(id)\n }\n newState.ruleUpdating = newState.ruleUpdating.filter(x => x !== id)\n newState.ruleUpdated = newState.ruleUpdated.filter(x => x !== id)\n return newState\n}\n\nexport const resetRuleLoadingState = (state, { id, }) => {\n const newState = Object.assign({}, state)\n if (!id) {\n newState.ruleUpdating = []\n newState.ruleUpdated = []\n newState.ruleUpdateFailed = []\n } else if (Array.isArray(id)){\n newState.ruleUpdating = newState.ruleUpdating.filter(x => !id.includes(x))\n newState.ruleUpdated = newState.ruleUpdated.filter(x => !id.includes(x))\n newState.ruleUpdateFailed = newState.ruleUpdateFailed.filter(x => !id.includes(x))\n } else {\n newState.ruleUpdating = newState.ruleUpdating.filter(x => x !== id)\n newState.ruleUpdated = newState.ruleUpdated.filter(x => x !== id)\n newState.ruleUpdateFailed = newState.ruleUpdateFailed.filter(x => x !== id)\n }\n return newState\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.GET_RULES] : rulesLoading,\n [Types.RULES_LOADED] : rulesLoaded,\n [Types.UPDATE_RULE] : ruleUpdating,\n [Types.RULE_UPDATE_FAILED] : ruleUpdateFailed,\n [Types.RULE_UPDATED] : ruleUpdated,\n [Types.RESET_RULE_LOAD_STATE] : resetRuleLoadingState,\n})","import { createReducer, createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\nconst { Types, Creators, } = createActions({\n clearObjectIds : null,\n setObjectOneId : [ 'ObjectId', ],\n setObjectTwoId : [ 'ObjectId', ],\n fetchingDataForMerge : [ 'isFetchingData', ],\n})\n\nexport const MergeTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = Object.freeze({\n ObjectOneId : null,\n ObjectTwoId : null,\n isFetchingData : false,\n})\n\n/* ------------- Reducers ------------- */\n\nexport const clearObjectIds = () => {\n return INITIAL_STATE\n}\n\nexport const fetchingData = (state, { isFetchingData = false, }) => {\n return { ...state, isFetchingData, }\n}\n\nexport const setObjectOneId = (state, { ObjectId, }) => {\n return { ...state, ObjectOneId: ObjectId, }\n}\n\nexport const setObjectTwoId = (state, { ObjectId, }) => {\n return { ...state, ObjectTwoId: ObjectId, }\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.CLEAR_OBJECT_IDS] : clearObjectIds,\n [Types.SET_OBJECT_ONE_ID] : setObjectOneId,\n [Types.SET_OBJECT_TWO_ID] : setObjectTwoId,\n [Types.FETCHING_DATA_FOR_MERGE] : fetchingData,\n})","import { createReducer, createActions, } from 'reduxsauce'\nimport { addItemToArray, removeItemFromArray, } from '../utilities'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n AddItemToCart : [ 'itemId', ],\n RemoveItemFromCart : [ 'itemId', ],\n EmptyCart : null,\n})\n\nexport const CartTypes = Types\nexport default Creators\n\n/* ------------- Initial State ------------- */\n\nexport const INITIAL_STATE = {\n CartItemIds: [],\n}\n\nexport const AddItemToCart = (state, { itemId, }) => {\n const newState = { ...state, }\n newState.CartItemIds = addItemToArray(newState.CartItemIds, parseInt(itemId))\n return newState\n}\n\nexport const RemoveItemFromCart = (state, { itemId, }) => {\n const newState = { ...state, }\n newState.CartItemIds = removeItemFromArray(newState.CartItemIds, parseInt(itemId))\n return newState\n}\n\nexport const EmptyCart = () => {\n return { ...INITIAL_STATE, }\n}\n\n/* ------------- Hookup Reducers To Types ------------- */\n\nexport const reducer = createReducer(INITIAL_STATE, {\n [Types.ADD_ITEM_TO_CART] : AddItemToCart,\n [Types.REMOVE_ITEM_FROM_CART] : RemoveItemFromCart,\n [Types.EMPTY_CART] : EmptyCart,\n})","import { combineReducers, } from 'redux'\nimport { reducer as orm, } from './OrmRedux'\nimport { reducer as app, } from './AppRedux'\nimport { reducer as Map, } from './MapRedux'\nimport { reducer as ui, } from './UiRedux'\nimport { reducer as ApplicantInfo, } from './ApplicantInfoSectionRedux'\nimport { reducer as BurnNoticeSubscriber, } from './BurnNoticeSubscriberRedux'\nimport { reducer as BurnPermitList, } from './BurnPermitListRedux'\nimport { reducer as BurnPermitSearch, } from './BurnPermitSearchRedux'\nimport { reducer as PermitConditions, } from './BurnPermitConditionsRedux'\nimport { reducer as BurnPermitForm, } from './BurnPermitFormRedux'\nimport { reducer as BurnPermitInstructions, } from './BurnPermitInstructionsRedux'\nimport { reducer as BurnPermitPileGroups, } from './BurnPermitPileGroupRedux'\nimport { reducer as BurnPermitSignature, } from './BurnPermitSignatureRedux'\nimport { reducer as BurnPermitOrder, } from './BurnPermitOrderRedux'\nimport { reducer as BurnRequestList, } from './BurnRequestListRedux'\nimport { reducer as BurnRequestDetail, } from './BurnRequestDetailRedux'\nimport { reducer as BurnRequestSearch, } from './BurnRequestSearchRedux'\nimport { reducer as Calendar, } from './CalendarRedux'\nimport { reducer as CustomerInteraction, } from './CustomerInteractionRedux'\nimport { reducer as Dashboard, } from './DashboardRedux'\nimport { reducer as GeoCoordinate, } from './GeoCoordinateRedux'\nimport { reducer as Files, } from './FileRedux'\nimport { reducer as api, } from './ApiRedux'\nimport { reducer as Agency, } from './AgencyRedux'\nimport { reducer as Person, } from './PersonRedux'\nimport { reducer as User, } from './UserRedux'\nimport { reducer as PostBurn, } from './PostBurnRedux'\nimport { reducer as Reports, } from './ReportsRedux'\nimport { reducer as Rules, } from './RulesRedux'\nimport { reducer as Merge, } from './MergeRedux'\nimport { reducer as Cart, } from './CartRedux'\n\nconst appReducer = combineReducers({\n orm,\n api,\n app,\n Map,\n ui,\n ApplicantInfo,\n BurnNoticeSubscriber,\n BurnPermitInstructions,\n BurnPermitForm,\n BurnPermitList,\n BurnPermitPileGroups,\n BurnPermitOrder,\n BurnPermitSearch,\n BurnPermitSignature,\n BurnRequestDetail,\n BurnRequestList,\n BurnRequestSearch,\n PermitConditions,\n Calendar,\n CustomerInteraction,\n GeoCoordinate,\n Dashboard,\n Agency,\n Person,\n PostBurn,\n User,\n Files,\n Reports,\n Rules,\n Merge,\n Cart,\n})\n\n// This allows us to take advantage of persistance between deployments\n// but can purge the user's local state when we update app versions to\n// prevent trying to rehydrate an incompatible state\nconst rootReducer = (state, action) => {\n if (action.type === 'persist/PURGE') {\n state = undefined\n }\n return appReducer(state, action)\n}\n\n\nexport const EnhanceOffline = reducer => {\n // take original reducer and return new one:\n return function (state, action) {\n switch (action.type) {\n case 'CANCEL_SUBMIT': {\n const { outbox, } = state.offline\n const actionIndex = outbox.findIndex(o => {\n const { effect, commit, } = o.meta.offline\n let matchingAction = \n o.type === action.action_type // match the redux action type\n && effect.url === action.url // match the url of the request\n && effect.init.method === action.method // match the method of the request\n // If there's a request body, match on that as well\n if (matchingAction && effect.init && effect.init.body && action.keyName && action.keyValue) {\n matchingAction = (effect.init.body[action.keyName] === action.keyValue || commit.localId === action.keyValue)\n }\n return matchingAction\n })\n\n if (actionIndex > -1) {\n outbox.splice(actionIndex, 1)\n }\n\n return { ...state, offline: { ...state.offline, outbox, }, }\n }\n default:\n // just proxy all other actions\n return reducer(state, action)\n }\n }\n}\n\nexport default rootReducer","/* eslint-disable no-undef */\n/** @constant @type {string} React App Version string from `.env`*/\nexport const REACT_APP_VERSION = process.env.REACT_APP_VERSION\n\n//#region Specific Claims\n\n/** SAW User Claim value from `.env`, lower cased*/\nexport const REACT_APP_LANDOWNER_GROUP = process.env.REACT_APP_LANDOWNER_GROUP.toLowerCase()\n/** DNR Region Staff Claim value from `.env`, lower cased */\nexport const REACT_APP_REGION_STAFF = process.env.REACT_APP_REGION_STAFF.toLowerCase()\n/** DNR Region Administrator Claim value from `.env`, lower cased */\nexport const REACT_APP_REGION_ADMIN = process.env.REACT_APP_REGION_ADMIN.toLowerCase()\n/** DNR Smoke Mgmt Staff Claim value from `.env`, lower cased */\nexport const REACT_APP_SMOKE_STAFF = process.env.REACT_APP_SMOKE_STAFF.toLowerCase()\n/** DNR Smoke Mgmt Admin Claim value from `.env`, lower cased */\nexport const REACT_APP_SMOKE_ADMIN = process.env.REACT_APP_SMOKE_ADMIN.toLowerCase()\n/** DNR Smoke Mgmt State Gov Customer Claim value from `.env`, lower cased */\nexport const REACT_APP_STATE_GOV_CUST = process.env.REACT_APP_STATE_GOV_CUST.toLowerCase()\n\n//#endregion\n\n//#region Read Raw Group Claims\n\n// Read the raw strings from .env\nconst REACT_APP_LANDOWNER_GROUP_SIDS = process.env.REACT_APP_LANDOWNER_GROUP_SIDS\nconst REACT_APP_DNR_GROUP_SIDS = process.env.REACT_APP_DNR_GROUP_SIDS\nconst REACT_APP_DNR_ADMIN_GROUP_SIDS = process.env.REACT_APP_DNR_ADMIN_GROUP_SIDS\nconst REACT_APP_DNR_SMOKE_MGMT_GROUP_SIDS = process.env.REACT_APP_DNR_SMOKE_MGMT_GROUP_SIDS\n\n//#endregion\n/* eslint-enable no-undef */\n\n//#region Process Claim Groups\n\n/** SAW User Claims array from `.env`*/\nexport const LANDOWNER_GROUP_SIDS = JSON.parse(REACT_APP_LANDOWNER_GROUP_SIDS)\n/** ADFS User Claims array from `.env`*/\nexport const DNR_GROUP_SIDS = JSON.parse(REACT_APP_DNR_GROUP_SIDS)\n/** DNR Smoke Mgmt or Region Admin Claims array from `.env`*/\nexport const ADMIN_GROUP_SIDS = JSON.parse(REACT_APP_DNR_ADMIN_GROUP_SIDS)\n/** DNR Smoke Mgmt Claims array from `.env`*/\nexport const SMOKE_MGMT_GROUP_SIDS = JSON.parse(REACT_APP_DNR_SMOKE_MGMT_GROUP_SIDS)\n\n//#endregion\n\n\n//#region Person Types\n\nexport const PERSON_TYPE_DNR_STAFF = 'DNR Staff'\nexport const PERSON_TYPE_GOV_CUST = 'WA State Gov\\'t Customer'\nexport const PERSON_TYPE_PRIVATE = 'Private'\nexport const PERSON_TYPE_GOV_AGENT = 'Government Agency'\nexport const PERSON_TYPE_AGENT = 'Agent'\n\n//#endregion\n\n\nexport const mapGroupToReadableName = group => {\n group = group.toLowerCase()\n switch (!!group) {\n case group === REACT_APP_REGION_ADMIN:\n return 'Region Administrator'\n case group === REACT_APP_REGION_STAFF:\n return 'Region Staff'\n case group === REACT_APP_SMOKE_STAFF:\n return 'Smoke Management Staff'\n case group === REACT_APP_SMOKE_ADMIN:\n return 'Smoke Management Administrator'\n case group === REACT_APP_STATE_GOV_CUST:\n return 'State Government Customer'\n case group === REACT_APP_LANDOWNER_GROUP:\n return 'SAW User'\n default:\n break\n }\n}\n","import { createSelector, } from 'reselect'\r\nimport { createSelector as createSelectorOrm, } from 'redux-orm'\r\nimport orm from '../models'\r\nimport { DNR_GROUP_SIDS, PERSON_TYPE_GOV_CUST, PERSON_TYPE_PRIVATE, PERSON_TYPE_AGENT, } from './env'\r\n\r\n\r\nexport const checkedLookupDataSelector = state => state.api.lookupDataChecked\r\nexport const propsSelector = (state, props) => {\r\n return props\r\n}\r\nexport const filterSelector = (state, props, filterObj) => filterObj\r\n\r\nexport const idSelector = (state, props) => {\r\n let id = props\r\n // If it's already an integer, pass it through\r\n if (Number.isInteger(id)) {\r\n return id\r\n }\r\n // Parse the value to an int\r\n id = parseInt(id)\r\n // If it's an integer now, pass it through\r\n if (Number.isInteger(id)) {\r\n return id\r\n }\r\n // Otherwise return null\r\n return null\r\n}\r\n\r\n/**\r\n * Returns a redux-orm based selector enriched with any additional selectors provided\r\n */\r\nexport const ormSelector = function () {\r\n // `arguments` is a built-in object for functions that capture that arguments in an array-like object\r\n // In this implementation, `arguments` contains the selectors and callback functions passed to this function\r\n // Since the number of selectors can vary, we use this function to abstract away the base `orm` requirement\r\n const args = Array.prototype.slice.call(arguments)\r\n return createSelectorOrm(orm, ...args)\r\n}\r\n\r\n/**\r\n * Returns a redux-orm based selector enriched with a `idSelector` and any additional selectors provided\r\n */\r\nexport const ormByIdSelector = function () {\r\n const args = Array.prototype.slice.call(arguments)\r\n return createSelectorOrm(orm, idSelector, ...args)\r\n}\r\n\r\n/**\r\n * Returns a redux-orm based selector enriched with a `propsSelector` and any additional selectors provided\r\n */\r\nexport const ormWithPropSelector = function () {\r\n const args = Array.prototype.slice.call(arguments)\r\n return createSelectorOrm(orm, propsSelector, ...args)\r\n}\r\n\r\nexport const getValueOrDefault = function (value, def) {\r\n if (value === undefined || value === null) {\r\n return def\r\n }\r\n return value\r\n}\r\n\r\nexport const addressMapper = (val) => {\r\n return {\r\n AddressId : val.AddressId,\r\n StreetLine1 : val.StreetLine1,\r\n StreetLine2 : getValueOrDefault(val.StreetLine2, ''),\r\n StreetLine3 : getValueOrDefault(val.StreetLine3, ''),\r\n AddressCity : val.AddressCity,\r\n AddressState : val.AddressState,\r\n AddressZipCode : val.AddressZipCode,\r\n AddressCountry : val.AddressCountry,\r\n AddressTypeId : val.AddressTypeId,\r\n CountyId : val.CountyId,\r\n Active : val.Active,\r\n CreateBy : val.CreateBy,\r\n CreateDate : val.CreateDate,\r\n UpdateBy : val.UpdateBy,\r\n UpdateDate : val.UpdateDate,\r\n IsLocal : getValueOrDefault(val.IsLocal, false),\r\n }\r\n}\r\nexport const phoneMapper = (val) => {\r\n return {\r\n PhoneId : val.PhoneId,\r\n PhoneNumber : val.PhoneNumber,\r\n PhoneExtension : getValueOrDefault(val.PhoneExtension, ''),\r\n PhoneNumberConfirmed : val.PhoneNumberConfirmed,\r\n PhoneTypeId : val.PhoneTypeId,\r\n ReceivesAlerts : val.ReceivesAlerts || false,\r\n Active : val.Active,\r\n CreateBy : val.CreateBy,\r\n CreateDate : val.CreateDate,\r\n UpdateBy : val.UpdateBy,\r\n UpdateDate : val.UpdateDate,\r\n IsLocal : val.IsLocal || false,\r\n }\r\n}\r\n\r\nexport const emailMapper = email => {\r\n if (!email) {\r\n return email\r\n }\r\n return {\r\n EmailId : email.EmailId,\r\n EmailAddress : getValueOrDefault(email.EmailAddress, ''),\r\n NormalizedEmailAddress : getValueOrDefault(email.NormalizedEmailAddress, ''),\r\n EmailConfirmed : getValueOrDefault(email.EmailConfirmed, false),\r\n CreateDate : email.CreateDate,\r\n CreateBy : email.CreateBy,\r\n UpdateDate : email.UpdateDate,\r\n UpdateBy : email.UpdateBy,\r\n }\r\n}\r\n\r\nexport const networkStateSelector = state => state.offline\r\n\r\nexport const showLoadingSelector = state => state.app.showLoading\r\n\r\nexport const appIsOnlineSelector = createSelector(\r\n networkStateSelector,\r\n ({ online, }) => online\r\n)\r\n\r\n// \r\n\r\nexport const permitByBurnPermitNumberSelector = ormWithPropSelector(\r\n ({ BurnPermit, }, BurnPermitNumber) => {\r\n return BurnPermit.get({ BurnPermitNumber: BurnPermitNumber.toUpperCase(), })\r\n }\r\n)\r\n\r\nexport const permitByIdSelector = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return null\r\n }\r\n return BurnPermit.withId(BurnPermitId)\r\n }\r\n)\r\n\r\nexport const permitIdAndSectionIdsByPermitIdSelector = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return null\r\n }\r\n\r\n let permit = BurnPermit.filter({ BurnPermitId, }).toRefArray()\r\n if (permit) {\r\n permit = permit.map(p => {\r\n return {\r\n BurnPermitId : p.BurnPermitId,\r\n BurnPermitAreaId : p.BurnPermitAreaId,\r\n BurnPermitSiteId : p.BurnPermitSiteId,\r\n BurnPermitLocationId : p.BurnPermitLocationId,\r\n BurnPermitFuelId : p.BurnPermitFuelId,\r\n BurnPermitNumber : p.BurnPermitNumber || '',\r\n }\r\n })[0]\r\n }\r\n return permit\r\n }\r\n)\r\n\r\nexport const permitStatus = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return null\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return null\r\n }\r\n\r\n if (permit.BurnPermitStatusXrefs.exists()) {\r\n let BurnPermitStatusId = '', BurnPermitStatusName = '', BurnPermitStatusDescription = ''\r\n const statusXref = permit.BurnPermitStatusXrefs.orderBy('CreateDate', 'desc').first()\r\n\r\n if (statusXref.BurnPermitStatus.BurnPermitStatusName !== 'Issued') {\r\n BurnPermitStatusId = statusXref.BurnPermitStatus.BurnPermitStatusId\r\n BurnPermitStatusName = statusXref.BurnPermitStatus.BurnPermitStatusName\r\n BurnPermitStatusDescription = statusXref.BurnPermitStatus.BurnPermitStatusDescription\r\n }\r\n\r\n if ([ 'Issued', 'Revoked', ].includes(BurnPermitStatusName) === false) {\r\n const hasSignedPermit = permit.BurnPermitDocument\r\n .all()\r\n .toModelArray()\r\n .some(d =>\r\n d.BurnPermitDocumentType\r\n && d.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Signed Permit'\r\n )\r\n const signature = permit.BurnPermitSignature.first() || {}\r\n const isAutoApproved = signature.PermitEnvelopeId === '[AUTO-APPROVED]'\r\n if (hasSignedPermit === false && isAutoApproved !== true) {\r\n return null\r\n }\r\n }\r\n // If we're not dealing with an Issued Permit that hasn't been signed or a revoked\r\n // one, set the vars for their appropriate info\r\n if (!BurnPermitStatusName) {\r\n BurnPermitStatusId = statusXref.BurnPermitStatus.BurnPermitStatusId\r\n BurnPermitStatusName = statusXref.BurnPermitStatus.BurnPermitStatusName\r\n BurnPermitStatusDescription = statusXref.BurnPermitStatus.BurnPermitStatusDescription\r\n }\r\n\r\n return {\r\n BurnPermitStatusXrefId : statusXref.BurnPermitStatusXrefId,\r\n StatusDate : statusXref.StatusDate,\r\n SiteInspected : statusXref.SiteInspected,\r\n Comment : statusXref.Comment,\r\n StatusDescription : BurnPermitStatusDescription,\r\n Status : BurnPermitStatusName,\r\n BurnPermitStatusId : BurnPermitStatusId,\r\n CreateBy : statusXref.CreateBy,\r\n CreateDate : statusXref.CreateDate,\r\n UpdateBy : statusXref.UpdateBy,\r\n UpdateDate : statusXref.UpdateDate,\r\n }\r\n }\r\n return null\r\n }\r\n)\r\n\r\nexport const permitStatusHistory = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return null\r\n }\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return null\r\n }\r\n\r\n const statuses = []\r\n\r\n const permitStatuses = permit.BurnPermitStatusXrefs\r\n if (permitStatuses.exists()) {\r\n const statusXref = permit.BurnPermitStatusXrefs.orderBy('CreateDate', 'desc').first()\r\n const isRevoked = statusXref.BurnPermitStatus.BurnPermitStatusName === 'Revoked'\r\n const hasSignedPermit = permit.BurnPermitDocument\r\n .all()\r\n .toModelArray()\r\n .some(d =>\r\n d.BurnPermitDocumentType\r\n && d.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Signed Permit'\r\n )\r\n const signature = permit.BurnPermitSignature.first() || {}\r\n const isAutoApproved = signature.PermitEnvelopeId === '[AUTO-APPROVED]'\r\n if (hasSignedPermit || isAutoApproved || isRevoked) {\r\n permitStatuses\r\n .orderBy('StatusDate', 'desc')\r\n .toModelArray()\r\n .forEach((x) => {\r\n let statusName = ''\r\n if (x.BurnPermitStatus && !!x.BurnPermitStatus.BurnPermitStatusName) {\r\n statusName = x.BurnPermitStatus.BurnPermitStatusName\r\n }\r\n\r\n statuses.push({\r\n BurnPermitStatusXrefId : x.BurnPermitStatusXrefId,\r\n StatusDate : x.StatusDate,\r\n Comment : x.Comment,\r\n Status : statusName,\r\n CreateBy : x.CreateBy,\r\n CreateDate : x.CreateDate,\r\n UpdateBy : x.UpdateBy,\r\n UpdateDate : x.UpdateDate,\r\n })\r\n })\r\n }\r\n else {\r\n const issuedStatus = permitStatuses\r\n .toModelArray()\r\n .filter(s =>\r\n s.BurnPermitStatus\r\n && s.BurnPermitStatus.BurnPermitStatusName === 'Issued'\r\n )[0]\r\n if (issuedStatus) {\r\n const dnrHasSigned = !!signature.PermitApproverSignedBy\r\n if (dnrHasSigned !== true) {\r\n statuses.push({\r\n BurnPermitStatusXrefId : issuedStatus.BurnPermitStatusXrefId,\r\n StatusDate : issuedStatus.StatusDate,\r\n Comment : '[SYSTEM] Awaiting Approver Signature',\r\n Status : 'Issue Initiated',\r\n CreateBy : issuedStatus.CreateBy,\r\n CreateDate : issuedStatus.CreateDate,\r\n UpdateBy : issuedStatus.UpdateBy,\r\n UpdateDate : issuedStatus.UpdateDate,\r\n })\r\n }\r\n else {\r\n statuses.push({\r\n BurnPermitStatusXrefId : issuedStatus.BurnPermitStatusXrefId,\r\n StatusDate : signature.PermitApproverSignedDate,\r\n Comment : '[SYSTEM] Awaiting Burn Permit Applicant Signature',\r\n Status : 'Issue Initiated',\r\n CreateBy : issuedStatus.CreateBy,\r\n CreateDate : issuedStatus.CreateDate,\r\n UpdateBy : issuedStatus.UpdateBy,\r\n UpdateDate : issuedStatus.UpdateDate,\r\n })\r\n }\r\n }\r\n }\r\n }\r\n\r\n const newApplStatuses = permit.BurnPermitApplicationStatusXrefs\r\n if (newApplStatuses.exists()) {\r\n newApplStatuses\r\n .orderBy('StatusDate', 'desc')\r\n .toModelArray()\r\n .forEach((x) => {\r\n let statusName = ''\r\n if (x.BurnPermitApplicationStatus && !!x.BurnPermitApplicationStatus.BurnPermitApplicationStatusName) {\r\n statusName = x.BurnPermitApplicationStatus.BurnPermitApplicationStatusName\r\n }\r\n \r\n statuses.push({\r\n BurnPermitApplicationStatusXrefId : x.BurnPermitApplicationStatusXrefId,\r\n CreateBy : x.CreateBy,\r\n StatusDate : x.StatusDate,\r\n SiteInspected : x.SiteInspected,\r\n Comment : x.Comment,\r\n Status : statusName,\r\n BurnPermitApplicationStatusId : x.BurnPermitApplicationStatusId,\r\n BurnPermitId : x.BurnPermitId,\r\n InternalOnly : x.InternalOnly,\r\n ApplicationSection : x.ApplicationSection,\r\n AssignedTo : x.AssignedTo,\r\n })\r\n })\r\n }\r\n\r\n // Order by StatusDate desc just in case\r\n const sortedStatuses = statuses\r\n .sort((a, b) => {\r\n if (a.StatusDate < b.StatusDate) {\r\n return 1\r\n }\r\n if (a.StatusDate > b.StatusDate) {\r\n return -1\r\n }\r\n return 0\r\n })\r\n return sortedStatuses\r\n }\r\n)\r\n\r\nexport const permitStatuses = ormSelector(\r\n ({ BurnPermitStatus, }) => {\r\n const statuses = BurnPermitStatus.all()\r\n .toModelArray()\r\n .map(s => {\r\n return {\r\n Value : s.BurnPermitStatusId,\r\n Text : s.BurnPermitStatusName,\r\n }\r\n })\r\n return statuses\r\n }\r\n)\r\n\r\nexport const permitApplicationStatuses = ormSelector(\r\n ({ BurnPermitApplicationStatus, }) => {\r\n const statuses = BurnPermitApplicationStatus.all()\r\n .toModelArray()\r\n .map(s => {\r\n return {\r\n Value : s.BurnPermitApplicationStatusId,\r\n Text : s.BurnPermitApplicationStatusName,\r\n }\r\n })\r\n return statuses\r\n }\r\n)\r\n\r\nexport const burnedAcresByPermitSelector = ormByIdSelector(\r\n ({ PostBurn, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return 0\r\n }\r\n const postBurns = PostBurn.filter({ BurnPermitId, }).toRefArray().map(p => {\r\n return {\r\n PostBurnId : p.PostBurnId,\r\n BurnedAcres : p.BurnedBlackAcres || 0,\r\n }\r\n })\r\n const pbMap = new Map()\r\n for (let i = 0, len = postBurns.length; i < len; i++) {\r\n pbMap.set(postBurns[i].PostBurnId, postBurns[i])\r\n }\r\n const burnedAcres = [ ...pbMap.values(), ].reduce((a, b) => { return a + b.BurnedAcres }, 0)\r\n return burnedAcres\r\n }\r\n)\r\n\r\nexport const burnedTonsByPermitSelector = ormByIdSelector(\r\n ({ PostBurn, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return 0\r\n }\r\n const postBurns = PostBurn.filter({ BurnPermitId, }).toRefArray()\r\n .map(p => {\r\n return {\r\n PostBurnId : p.PostBurnId,\r\n ConsumedTons : p.ConsumedTons || 0,\r\n }\r\n })\r\n const pbMap = new Map()\r\n for (let i = 0, len = postBurns.length; i < len; i++) {\r\n pbMap.set(postBurns[i].PostBurnId, postBurns[i])\r\n }\r\n const burnedTons = [ ...pbMap.values(), ].reduce((a, b) => { return a + b.ConsumedTons }, 0)\r\n return burnedTons\r\n }\r\n)\r\n\r\n// \r\n// \r\n\r\nexport const directionsForSelectSelector = ormWithPropSelector(\r\n ({ Direction, }, filter) => {\r\n const dirs = Direction.all()\r\n if (dirs) {\r\n let models = dirs.toModelArray()\r\n if (typeof filter === 'function') {\r\n models = models.filter(filter)\r\n }\r\n return models.map((d) => {\r\n return {\r\n Value : d.DirectionId,\r\n Text : d.DirectionName,\r\n Abbrev : d.DirectionAbbreviation,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\n// \r\n\r\nexport const countiesForSelectSelector = ormSelector(\r\n ({ County, }) => {\r\n const counties = County.all()\r\n if (counties) {\r\n return counties.toModelArray().map(r => {\r\n return {\r\n Value : r.CountyId,\r\n Text : r.CountyName,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\nexport const fireDistrictDepartmentsForSelectSelector = ormSelector(\r\n ({ FireDistrictDepartment, }) => {\r\n const fireDistrictDepartments = FireDistrictDepartment.all()\r\n if (fireDistrictDepartments) {\r\n return fireDistrictDepartments\r\n .orderBy('FireDistrictDepartmentDescription', 'asc')\r\n .toModelArray()\r\n .map(r => {\r\n return {\r\n Value : r.FireDistrictDepartmentId,\r\n Text : r.FireDistrictDepartmentDescription,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\n// \r\n\r\nexport const locationQuartersSelectSelector = ormSelector(\r\n ({ LocationQuarter, }) => {\r\n const locationQuarters = LocationQuarter.all()\r\n if (locationQuarters) {\r\n return locationQuarters.toModelArray().map((lq) => {\r\n return {\r\n Value : lq.LocationQuarterName,\r\n Text : lq.LocationQuarterName,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\n// \r\n\r\n// \r\n\r\nexport const permitLocationByIdSelector = ormByIdSelector(\r\n ({ BurnPermitLocation, }, BurnPermitLocationId) => {\r\n if (isNaN(BurnPermitLocationId)) {\r\n return null\r\n }\r\n const location = BurnPermitLocation.withId(BurnPermitLocationId)\r\n if (!location) {\r\n return null\r\n }\r\n return {\r\n BurnPermitLocationId,\r\n FireDistrictDepartmentId : location.FireDistrictDepartmentId || '',\r\n FireDistrictDepartment : location.FireDistrictDepartment,\r\n DrivingDirections : location.DrivingDirections || '',\r\n SlopePercent : location.SlopePercent || '',\r\n ElevationFeet : location.ElevationFeet || '',\r\n RegionId : location.RegionId || '',\r\n Region : location.Region,\r\n CountyId : location.CountyId || '',\r\n County : location.County,\r\n AddressId : location.AddressId || '',\r\n Address : location.Address ? addressMapper(location.Address) : null,\r\n AddressLocation : location.AddressLocation,\r\n Latitude : location.Latitude || '',\r\n Longitude : location.Longitude || '',\r\n LegalDescriptionSection : location.LegalDescriptionSection || '',\r\n LegalDescriptionTownship : location.LegalDescriptionTownship || '',\r\n LegalDescriptionRange : location.LegalDescriptionRange || '',\r\n LegalDescriptionDirectionId : location.LegalDescriptionDirectionId || '',\r\n LegalDescriptionQuarter1 : location.LegalDescriptionQuarter1 || '',\r\n LegalDescriptionQuarter2 : location.LegalDescriptionQuarter2 || '',\r\n LegalDescriptionLocation : location.LegalDescriptionLocation,\r\n IsUGA : location.IsUGA || false,\r\n CreateBy : location.CreateBy,\r\n CreateDate : location.CreateDate,\r\n UpdateBy : location.UpdateBy,\r\n UpdateDate : location.UpdateDate,\r\n }\r\n }\r\n)\r\n\r\nexport const permitLocationLegalDesc = ormByIdSelector(\r\n ({ BurnPermitLocation, }, BurnPermitLocationId) => {\r\n if (isNaN(BurnPermitLocationId)) {\r\n return {}\r\n }\r\n const location = BurnPermitLocation.withId(BurnPermitLocationId)\r\n if (!location) {\r\n return {}\r\n }\r\n return {\r\n LegalDescriptionSection : location.LegalDescriptionSection || '',\r\n LegalDescriptionTownship : location.LegalDescriptionTownship || '',\r\n LegalDescriptionRange : location.LegalDescriptionRange || '',\r\n LegalDescriptionDirectionId : location.LegalDescriptionDirectionId || '',\r\n LegalDescriptionQuarter1 : location.LegalDescriptionQuarter1 || '',\r\n LegalDescriptionQuarter2 : location.LegalDescriptionQuarter2 || '',\r\n LegalDescriptionLocation : location.LegalDescriptionLocation,\r\n BurnPermitLocationId : location.BurnPermitLocationId,\r\n }\r\n }\r\n)\r\n\r\nexport const locationAddress = ormByIdSelector(\r\n permitLocationByIdSelector,\r\n ({ Address, }, locationId, location) => {\r\n let addr = null\r\n\r\n if (location) {\r\n if (location.Address) {\r\n // if location has properly related address\r\n addr = addressMapper(location.Address)\r\n }\r\n else if (location.AddressId) {\r\n // if location does not have properly related address\r\n const addrById = Address.withId(location.AddressId)\r\n if (addrById) {\r\n addr = addressMapper(addrById)\r\n }\r\n }\r\n else {\r\n addr = {\r\n AddressId : '',\r\n StreetLine1 : '',\r\n StreetLine2 : '',\r\n StreetLine3 : '',\r\n AddressCity : '',\r\n AddressState : 'WA',\r\n AddressZipCode : '',\r\n AddressCountry : '',\r\n AddressTypeId : '',\r\n CountyId : '',\r\n CreateBy : '',\r\n CreateDate : '',\r\n UpdateBy : '',\r\n UpdateDate : '',\r\n IsLocal : true,\r\n }\r\n }\r\n if (addr) {\r\n addr.AddressLocation = location.AddressLocation || null\r\n }\r\n }\r\n return addr\r\n }\r\n)\r\n\r\n// \r\n\r\n// \r\n\r\nexport const personByIdSelector = ormByIdSelector(\r\n ({ Person, }, PersonId) => {\r\n if (isNaN(PersonId)) {\r\n return null\r\n }\r\n const person = Person.withId(PersonId) \r\n if (!person) {\r\n return null\r\n }\r\n const Addresses = person.Addresses.all().toRefArray().map(addressMapper)\r\n const Phones = person.Phones.all().toRefArray().map(phoneMapper)\r\n return {\r\n PersonId : person.PersonId,\r\n EmailId : person.EmailId,\r\n PersonTypeId : person.PersonTypeId,\r\n IsUser : person.IsUser,\r\n PersonFirstName : person.PersonFirstName,\r\n PersonMiddleName : person.PersonMiddleName,\r\n PersonLastName : person.PersonLastName,\r\n ContactMethodId : person.ContactMethodId,\r\n AlertMethodId : person.AlertMethodId,\r\n Email : person.Email,\r\n CreateBy : person.CreateBy,\r\n UpdateBy : person.UpdateBy,\r\n CreateDate : person.CreateDate,\r\n UpdateDate : person.UpdateDate,\r\n Addresses,\r\n Phones, \r\n }\r\n }\r\n)\r\n\r\n// \r\n\r\n//
\r\n\r\nexport const addressByIdSelector = ormByIdSelector(\r\n ({ Address, }, AddressId) => {\r\n if (isNaN(AddressId)) {\r\n return null\r\n }\r\n const address = Address.withId(AddressId) \r\n if (!address) {\r\n return null\r\n }\r\n return addressMapper(address)\r\n }\r\n)\r\n\r\nexport const addressTypeByNameSelector = ormWithPropSelector(\r\n ({ AddressType, }, AddressTypeName) => {\r\n return AddressType.all().filter({ AddressTypeName, }).first()\r\n }\r\n)\r\n\r\nexport const addressTypesSelectSelector = ormSelector(\r\n ({ AddressType, }) => {\r\n const addrTypes = AddressType.all()\r\n if (addrTypes) {\r\n return addrTypes.toModelArray().map((a) => {\r\n return {\r\n Value : a.AddressTypeId,\r\n Text : a.AddressTypeName,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n//
\r\n\r\n// \r\nexport const contactMethodsForSelectSelector = ormSelector(\r\n ({ ContactMethod, }) => {\r\n return ContactMethod.all().toModelArray().map((m) => {\r\n return {\r\n Value : m.ContactMethodId,\r\n Text : m.ContactMethodName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const phonesByPersonIdForSelectSelector = ormByIdSelector(\r\n (session, PersonId) => {\r\n if (isNaN(PersonId)) {\r\n return []\r\n }\r\n const person = session.Person.withId(PersonId)\r\n if (!person) {\r\n return []\r\n }\r\n if (!person.Phones.exists()) {\r\n return []\r\n }\r\n return person.Phones.all().toModelArray().map((a) => {\r\n return {\r\n Value : a.PhoneId,\r\n Text : a.PhoneNumber,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const addressesByPersonIdForSelectSelector = ormByIdSelector(\r\n (session, PersonId) => {\r\n if (isNaN(PersonId)) {\r\n return []\r\n }\r\n const person = session.Person.withId(PersonId)\r\n if (!person) {\r\n return []\r\n }\r\n if (!person.Addresses.exists()) {\r\n return []\r\n }\r\n return person.Addresses.toModelArray().map((a) => {\r\n return {\r\n Value : a.AddressId,\r\n Text : a.toString(),\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const phoneTypesSelector = ormSelector(\r\n session => {\r\n const phoneTypes = session.PhoneType.all()\r\n if (phoneTypes) {\r\n return phoneTypes.toModelArray().map((a) => {\r\n return {\r\n Value : a.PhoneTypeId,\r\n Text : a.PhoneTypeName,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\n// \r\n\r\n// \r\n\r\nexport const emailByPersonIdSelector = ormByIdSelector(\r\n (session, PersonId) => {\r\n if (isNaN(PersonId)) {\r\n return null\r\n }\r\n const byEmail = session.Email.filter({ PersonId, }).first()\r\n if (byEmail) {\r\n return {\r\n EmailId : byEmail.EmailId,\r\n EmailAddress : byEmail.EmailAddress,\r\n NormalizedEmailAddress : byEmail.NormalizedEmailAddress,\r\n EmailConfirmed : byEmail.EmailConfirmed,\r\n CreateBy : byEmail.CreateBy,\r\n CreateDate : byEmail.CreateDate,\r\n UpdateBy : byEmail.UpdateBy,\r\n UpdateDate : byEmail.UpdateDate,\r\n }\r\n }\r\n const person = session.Person.withId(PersonId)\r\n if (!person) {\r\n return null\r\n }\r\n if (person.Email) {\r\n return {\r\n EmailId : person.Email.EmailId,\r\n EmailAddress : person.Email.EmailAddress,\r\n NormalizedEmailAddress : person.Email.NormalizedEmailAddress,\r\n EmailConfirmed : person.Email.EmailConfirmed,\r\n CreateBy : person.Email.CreateBy,\r\n CreateDate : person.Email.CreateDate,\r\n UpdateBy : person.Email.UpdateBy,\r\n UpdateDate : person.Email.UpdateDate,\r\n }\r\n }\r\n return null \r\n }\r\n)\r\n\r\n// \r\n\r\nexport const equipmentTypeCheckboxSelector = ormWithPropSelector(\r\n propsSelector,\r\n (session, { category, useDesc, }) => {\r\n let models = session.EquipmentType.all().toModelArray()\r\n if (category) {\r\n models = models.filter(e => e.EquipmentTypeCategoryName === category || !e.EquipmentTypeCategoryName)\r\n }\r\n return models.map((e) => {\r\n return {\r\n Value : e.EquipmentTypeId,\r\n Text : useDesc !== true ? e.EquipmentTypeName : e.EquipmentTypeDescription,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const burnIgnitionTypesCheckboxSelector = ormSelector(\r\n session => {\r\n return session.BurnIgnitionType.all().toModelArray().map((b) => {\r\n return {\r\n Value : b.BurnIgnitionTypeId,\r\n Text : b.BurnIgnitionTypeName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const permitHasPileInfoSelector = ormByIdSelector(\r\n ({ BurnPermitPileGroup, }, PermitId) => {\r\n if (isNaN(PermitId)) {\r\n return false\r\n }\r\n return BurnPermitPileGroup.filter({ BurnPermitId: PermitId, }).exists()\r\n }\r\n)\r\n\r\nexport const duffTypeSelectSelector = ormSelector(\r\n ({ DuffType, }) => {\r\n const duffTypes = DuffType.all()\r\n if (duffTypes.exists()) {\r\n return duffTypes.toRefArray().map(d => {\r\n return {\r\n Value : d.DuffTypeId,\r\n Text : d.DuffTypeName,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\nexport const daysOfWeekCheckboxSelector = ormSelector(\r\n session => {\r\n return session.DaysOfWeek.all().toModelArray().map((d) => {\r\n return {\r\n Value : d.DayOfWeekId,\r\n Text : d.DayOfWeekName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const fuelDiametersSelector = ormSelector(\r\n session => {\r\n return session.FuelDiameter.all().toModelArray()\r\n }\r\n)\r\n\r\nconst fuelsBurnTypes = [ 'Broadcast', 'Natural', ]\r\n\r\nexport const fuelsInfoByIdSelector = ormByIdSelector(\r\n ({ BurnPermit, BurnPermitFuel, }, FuelsInfoId) => {\r\n if (isNaN(FuelsInfoId)) {\r\n return null\r\n }\r\n \r\n const fuel = BurnPermitFuel.withId(FuelsInfoId)\r\n if (!fuel) {\r\n return null\r\n }\r\n let ShowFuelsCalculator = false\r\n const permit = BurnPermit.filter({ BurnPermitFuelId: FuelsInfoId, }).first()\r\n if (permit && permit.BurnPermitArea && permit.BurnPermitArea.BurnTypes) {\r\n ShowFuelsCalculator = permit.BurnPermitArea.BurnTypes\r\n .all()\r\n .toModelArray()\r\n .some(t => fuelsBurnTypes.includes(t.BurnTypeName))\r\n }\r\n const ret = {\r\n BurnPermitFuelId : fuel.BurnPermitFuelId,\r\n BurnIgnitionTypes : fuel.BurnIgnitionTypes.toRefArray().map(t => t.BurnIgnitionTypeId) || [],\r\n OtherBurnIgnitionTypeDescription : fuel.OtherBurnIgnitionTypeDescription || '',\r\n DuffTypeId : getValueOrDefault(fuel.DuffTypeId, ''),\r\n DuffDepth : getValueOrDefault(fuel.DuffDepth, ''),\r\n LitterDepth : getValueOrDefault(fuel.LitterDepth, ''),\r\n BurnPermitFuelLoadingXref : fuel.BurnPermitFuelLoadingXrefs.toRefArray() || [],\r\n Shrubs : getValueOrDefault(fuel.Shrubs, ''),\r\n GrassHerb : getValueOrDefault(fuel.GrassHerb, ''),\r\n ConsumedTonnage : fuel.ConsumedTonnage || '',\r\n TotalTonsPerAcre : fuel.TotalTonsPerAcre || '',\r\n CreateBy : fuel.CreateBy,\r\n CreateDate : fuel.CreateDate,\r\n UpdateBy : fuel.UpdateBy,\r\n UpdateDate : fuel.UpdateDate,\r\n ShowFuelsCalculator,\r\n }\r\n return ret\r\n }\r\n)\r\n\r\nexport const getBurnPermitId = ormWithPropSelector(\r\n (session, filterObj) => {\r\n const burnPermit = session.BurnPermit.filter(filterObj)\r\n if (burnPermit.exists()) {\r\n const { BurnPermitId, } = burnPermit.first()\r\n return BurnPermitId\r\n }\r\n return null\r\n }\r\n)\r\n\r\nexport const getBurnPermit = ormWithPropSelector(\r\n (session, filterObj) => {\r\n const burnPermit = session.BurnPermit.filter(filterObj)\r\n if (burnPermit.exists()) {\r\n return burnPermit.first()\r\n }\r\n return null\r\n }\r\n)\r\n\r\nexport const burnPermitAreaByIdSelector = ormByIdSelector(\r\n (session, BurnPermitAreaId) => {\r\n if (isNaN(BurnPermitAreaId)) {\r\n return null\r\n }\r\n const area = session.BurnPermitArea.withId(BurnPermitAreaId)\r\n if (!area) {\r\n return null\r\n }\r\n return {\r\n BurnPermitAreaId,\r\n HarvestAcres : area.HarvestAcres || '',\r\n BurnTypes : area.BurnTypes.toRefArray().map(t => t.BurnTypeId) || [],\r\n CreateBy : area.CreateBy,\r\n CreateDate : area.CreateDate,\r\n UpdateBy : area.UpdateBy,\r\n UpdateDate : area.UpdateDate,\r\n }\r\n }\r\n)\r\n\r\nexport const burnTypesCheckboxSelector = ormSelector(\r\n session => {\r\n return session.BurnType.all().toModelArray().map((b) => {\r\n return {\r\n Value : b.BurnTypeId,\r\n Text : b.BurnTypeName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const countySelectSelector = ormSelector(\r\n session => {\r\n return session.County.all().toModelArray().map((d) => {\r\n return {\r\n Value : d.CountyId,\r\n Text : d.CountyName,\r\n }\r\n })\r\n }\r\n)\r\n\r\n// \r\n\r\nexport const forestTypesSelector = ormSelector(\r\n session => {\r\n return session.ForestType.all().toModelArray()\r\n }\r\n)\r\n\r\n// \r\n\r\n\r\nexport const getDnrUsersForSelect = ormSelector(\r\n session => {\r\n const users = session.ApplicationUser\r\n .filter(u => DNR_GROUP_SIDS.includes(u.ClaimValue))\r\n .toModelArray()\r\n .map(u => {\r\n return {\r\n Value : u.PersonId,\r\n Text : `${u.FirstName} ${u.LastName}`,\r\n }\r\n })\r\n return users || []\r\n }\r\n)\r\n\r\nexport const storedPersonIds = ormSelector(\r\n session => {\r\n return session.Person.all().toRefArray().map(p => p.PersonId)\r\n }\r\n)\r\n\r\nexport const storedLandownerIds = ormSelector(\r\n session => {\r\n return session.Person.all()\r\n .toModelArray()\r\n .filter(p => p.PersonType && (p.PersonType.PersonTypeName === PERSON_TYPE_PRIVATE || p.PersonType.PersonTypeName === PERSON_TYPE_GOV_CUST))\r\n .map(p => p.PersonId)\r\n }\r\n)\r\n\r\nexport const storedAgentIds = ormSelector(\r\n session => {\r\n return session.Person.all()\r\n .toModelArray()\r\n .filter(p => p.PersonType && p.PersonType.PersonTypeName === PERSON_TYPE_AGENT)\r\n .map(p => p.PersonId)\r\n }\r\n)\r\n\r\nexport const newPersonByIdSelector = ormByIdSelector(\r\n (session, personId) => {\r\n if (isNaN(personId) || !session.Person.idExists(personId)) {\r\n return null\r\n }\r\n\r\n const person = session.Person.withId(personId)\r\n\r\n let Addresses = []\r\n if (person.Addresses.exists()) {\r\n Addresses = person.Addresses.all().toRefArray().map(addressMapper)\r\n }\r\n let Phones = []\r\n if (person.Phones.exists()) {\r\n Phones = person.Phones.all().toRefArray().map(phoneMapper)\r\n }\r\n let Region = null\r\n if (person.PersonRegionXrefs.exists()) {\r\n // there should only ever be 1\r\n const xref = person.PersonRegionXrefs.first()\r\n Region = {\r\n RegionId : xref.PersonRegionXrefRegionId,\r\n RegionDefaultAssignee : xref.RegionDefaultAssignee,\r\n } \r\n }\r\n let AgencyXref = { AgencyName: '', }\r\n if (person.PersonAgencyXrefs.exists()) {\r\n // there should only ever be 1\r\n const xref = person.PersonAgencyXrefs.first()\r\n let AgencyName = ''\r\n if (xref.PersonAgencyXrefAgency) {\r\n AgencyName = xref.PersonAgencyXrefAgency.AgencyName\r\n }\r\n AgencyXref = {\r\n PersonAgencyXrefId : xref.PersonAgencyXrefId,\r\n AgencyId : xref.PersonAgencyXrefAgencyId,\r\n AgencyName : AgencyName,\r\n ConfirmedOn : xref.ConfirmedOn,\r\n ConfirmedBy : xref.ConfirmedBy,\r\n }\r\n }\r\n let alertPrefs = []\r\n if (Array.isArray(person.PersonAlertPreferenceXref) && person.PersonAlertPreferenceXref.length) {\r\n alertPrefs = person.PersonAlertPreferenceXref.reduce((acc, x) => {\r\n const name = `PersonAlertPreferenceXref_${x.AlertPreferenceId}`\r\n acc[name] = x\r\n return acc\r\n }, {})\r\n }\r\n \r\n return {\r\n PersonId : person.PersonId,\r\n EmailId : person.EmailId,\r\n IsUser : person.IsUser,\r\n ParentId : person.ParentId,\r\n PersonTypeId : person.PersonTypeId || '',\r\n PersonFirstName : person.PersonFirstName || '',\r\n PersonMiddleName : person.PersonMiddleName || '',\r\n PersonLastName : person.PersonLastName || '',\r\n ContactMethodId : person.ContactMethodId || '',\r\n CreateBy : person.CreateBy,\r\n CreateDate : person.CreateDate,\r\n UpdateBy : person.UpdateBy,\r\n UpdateDate : person.UpdateDate,\r\n Email : person.Email ? {\r\n EmailId : person.Email.EmailId,\r\n EmailAddress : person.Email.EmailAddress || '',\r\n CreateBy : person.Email.CreateBy,\r\n CreateDate : person.Email.CreateDate,\r\n UpdateBy : person.Email.UpdateBy,\r\n UpdateDate : person.Email.UpdateDate,\r\n } : null,\r\n Addresses,\r\n Phones,\r\n RegionId : Region ? Region.RegionId : '',\r\n RegionDefaultAssignee : Region ? Region.RegionDefaultAssignee ? 'yes' : 'no': 'no',\r\n Region,\r\n Agency : AgencyXref,\r\n ...alertPrefs,\r\n }\r\n }\r\n)\r\n\r\nexport const alertMethodsSelector = ormSelector(\r\n session => {\r\n if (!session.AlertMethod.all().exists()) {\r\n return []\r\n }\r\n return session.AlertMethod.all().toRefArray().map((v) => {\r\n return {\r\n Value : v.AlertMethodId,\r\n Text : v.AlertMethodName,\r\n Description : v.AlertMethodDescription,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const alertPreferencesSelect = ormSelector(\r\n session => {\r\n if (!session.AlertPreference.all().exists()) {\r\n return []\r\n }\r\n return session.AlertPreference.all().toRefArray().map((v) => {\r\n return {\r\n AlertPreferenceId : v.AlertPreferenceId,\r\n AlertPreferenceName : v.AlertPreferenceName,\r\n AlertPreferenceDescription : v.AlertPreferenceDescription,\r\n }\r\n })\r\n }\r\n)\r\n","import { filterSelector, ormWithPropSelector, } from './selectors'\r\nimport { isAfter, objHasProp, } from '../utilities'\r\n\r\n\r\nexport const getModelIdAttr = ormWithPropSelector(\r\n (session, modelName) => {\r\n const dbSet = session[modelName]\r\n if (!dbSet) {\r\n return null\r\n }\r\n\r\n return dbSet.options.idAttribute\r\n }\r\n)\r\n\r\nexport const modelByIdSelector = ormWithPropSelector(\r\n (session, { modelName, modelId, }) => {\r\n const dbSet = session[modelName]\r\n if (!dbSet) {\r\n return null\r\n }\r\n\r\n const props = {}\r\n props[dbSet.options.idAttribute] = modelId\r\n if (dbSet.exists(props)) {\r\n return dbSet.withId(modelId)\r\n }\r\n return null\r\n }\r\n)\r\n\r\nexport const itemsByModelNameSelector = ormWithPropSelector(\r\n (session, modelName) => {\r\n const model = session[modelName]\r\n if (model) {\r\n return model.all().toModelArray()\r\n }\r\n return []\r\n }\r\n)\r\n\r\nexport const modelExists = ormWithPropSelector(\r\n (session, { modelName, modelId, }) => {\r\n const dbSet = session[modelName]\r\n if (!dbSet) {\r\n return false\r\n }\r\n const props = {}\r\n props[dbSet.options.idAttribute] = modelId\r\n const exists = dbSet.exists(props)\r\n return exists\r\n }\r\n)\r\n\r\nexport const modelsExist = ormWithPropSelector(\r\n (session, { modelName, filter, }) => {\r\n const dbSet = session[modelName]\r\n if (!dbSet || !filter) {\r\n return false\r\n }\r\n const exists = dbSet.filter(filter).exists()\r\n return exists\r\n }\r\n)\r\n\r\nexport const getXrefIdsForModel = ormWithPropSelector(\r\n (session, { modelName, filterObj, }) => {\r\n const dbSet = session[modelName]\r\n if (!dbSet) {\r\n return null\r\n }\r\n \r\n const models = dbSet.filter(filterObj)\r\n if (!models.exists()) {\r\n return null\r\n }\r\n const xrefIds = models.toRefArray().map(m => m[dbSet.options.idAttribute])\r\n return xrefIds\r\n }\r\n)\r\n\r\nexport const newModelSelector = ormWithPropSelector(\r\n (session, { modelName, props, }) => {\r\n const dbSet = session[modelName]\r\n if (!dbSet) {\r\n return null\r\n }\r\n // Check to see if there are any existing models\r\n // If there aren't any, default the ID to one (1) instead of zero (0)\r\n // since zero (0) is a falsey value and there is logic\r\n // throughout the app that checks IDs of models to see\r\n // if it is greater than zero (0) and/or a truthy value\r\n if (dbSet.all().toModelArray().length === 0) {\r\n props[dbSet.options.idAttribute] = 1\r\n }\r\n const newModel = dbSet.create(props)\r\n newModel.IsLocal = true\r\n return newModel\r\n }\r\n)\r\n\r\nexport const getModelCount = ormWithPropSelector(\r\n filterSelector,\r\n (session, modelName, filter) => {\r\n const model = session[modelName]\r\n if (!model) {\r\n return 0\r\n }\r\n let models = []\r\n if (filter) {\r\n models = model.filter(filter).all()\r\n }\r\n else {\r\n models = model.all()\r\n }\r\n return models.count()\r\n }\r\n)\r\n\r\nexport const getLatestDateByModelName = ormWithPropSelector(\r\n filterSelector,\r\n (session, modelName, filterObj) => {\r\n const model = session[modelName]\r\n if (!model) {\r\n return null\r\n }\r\n let models = []\r\n if (filterObj) {\r\n models = model.filter(filterObj).all()\r\n }\r\n else {\r\n models = model.all()\r\n }\r\n if (!models.exists()) {\r\n return null\r\n }\r\n models = models.toModelArray()\r\n let latestCreate, latestUpdate\r\n if (objHasProp(model.fields, 'CreateDate')) {\r\n latestCreate = models.reduce((latestCreateDate, currentModel) => {\r\n if (isAfter(latestCreateDate, currentModel.CreateDate) || !latestCreateDate) {\r\n return currentModel.CreateDate\r\n }\r\n return latestCreateDate\r\n }, null)\r\n }\r\n if (objHasProp(model.fields, 'UpdateDate')) {\r\n latestUpdate = models.reduce((latestUpdateDate, currentModel) => {\r\n if (isAfter(latestUpdateDate, currentModel.UpdateDate) || !latestUpdateDate) {\r\n return currentModel.UpdateDate\r\n }\r\n return latestUpdateDate\r\n }, null)\r\n }\r\n return isAfter(latestCreate, latestUpdate) ? latestUpdate : latestCreate\r\n }\r\n)\r\n\r\nexport const modelValidationSchemaSelector = ormWithPropSelector(\r\n (session, modelName) => {\r\n if (!modelName) {\r\n return null\r\n }\r\n const model = session[modelName]\r\n if (!model) {\r\n return null\r\n }\r\n if (!model.getValidationSchema || (typeof model.getValidationSchema !== 'function')){\r\n return null\r\n }\r\n return model.getValidationSchema()\r\n }\r\n)\r\n\r\nexport const getModelEndpoint = ormWithPropSelector(\r\n (session, modelName) => {\r\n if (!modelName) {\r\n return null\r\n }\r\n const model = session[modelName]\r\n // Try to get the endpoint but provide a default\r\n const endpoint = typeof model.endpoint === 'function' ? model.endpoint() : modelName + 's'\r\n return endpoint\r\n }\r\n)","import { createSelector, } from 'reselect'\r\nimport { ormSelector, } from './selectors'\r\nimport { \r\n REACT_APP_LANDOWNER_GROUP,\r\n REACT_APP_REGION_STAFF,\r\n REACT_APP_REGION_ADMIN,\r\n REACT_APP_SMOKE_STAFF,\r\n REACT_APP_SMOKE_ADMIN,\r\n REACT_APP_STATE_GOV_CUST, \r\n PERSON_TYPE_DNR_STAFF, \r\n PERSON_TYPE_GOV_CUST, \r\n PERSON_TYPE_PRIVATE, \r\n PERSON_TYPE_GOV_AGENT, \r\n PERSON_TYPE_AGENT,\r\n mapGroupToReadableName,\r\n} from './env'\r\n\r\n/**\r\n * Selector for the current User state\r\n * @returns {Object} The current User state or null\r\n */\r\nexport const userObjSelector = state => state ? state.User : null\r\n\r\n/**\r\n * Memoized selector for current user information\r\n * @returns {Object} The current user object\r\n */\r\nexport const userSelector = createSelector(userObjSelector,\r\n user => user ? user : null\r\n)\r\n\r\n/**\r\n * Returns whether or not the current user is authenticated\r\n * @returns {Boolean} The user is authenticated\r\n */\r\nexport const userIsAuthenticated = createSelector(userObjSelector,\r\n ({ isAuthenticated, }) => isAuthenticated ? isAuthenticated : false\r\n)\r\n\r\n//#region User Group Claim Selectors\r\n\r\n/**\r\n * Selector for the current user's groups\r\n * @returns {Array} The current user's groups or an empty array\r\n */\r\nexport const userGroupsSelector = createSelector(\r\n userObjSelector,\r\n userIsAuthenticated,\r\n (user, isAuthenticated) => isAuthenticated && user && user.groups ? user.groups.map(x => x.toLowerCase()) : []\r\n)\r\n\r\n/**\r\n * Selector to determine if the user is in the Smoke Staff group\r\n * @returns {Boolean} True if the user is in the Smoke Staff group\r\n */\r\nexport const userIsSmokeStaff = createSelector(\r\n userGroupsSelector,\r\n userIsAuthenticated,\r\n (groups, isAuthenticated) => isAuthenticated && groups.includes(REACT_APP_SMOKE_STAFF)\r\n)\r\n\r\n/**\r\n * Selector to determine if the user is in the Smoke Admin group\r\n * @returns {Boolean} True if the user is in the Smoke Admin group\r\n */\r\nexport const userIsSmokeAdmin = createSelector(\r\n userGroupsSelector,\r\n userIsAuthenticated,\r\n (groups, isAuthenticated) => isAuthenticated && groups.includes(REACT_APP_SMOKE_ADMIN)\r\n)\r\n\r\n/**\r\n * Selector to determine if the user is in the Gov Customer group\r\n * @returns {Boolean} True if the user is in the Gov Customers group\r\n */\r\nexport const userIsStateGovCust = createSelector(\r\n userGroupsSelector,\r\n userIsAuthenticated,\r\n (groups, isAuthenticated) => isAuthenticated && groups.includes(REACT_APP_STATE_GOV_CUST)\r\n)\r\n\r\n/**\r\n * Selector to determine if the user is in the Region Staff group\r\n * @returns {Boolean} True if the user is in the Region Staff group\r\n */\r\nexport const userIsRegionStaff = createSelector(\r\n userGroupsSelector,\r\n userIsAuthenticated,\r\n (groups, isAuthenticated) => isAuthenticated && groups.includes(REACT_APP_REGION_STAFF)\r\n)\r\n\r\n/**\r\n * Selector to determine if the user is in the Region Admin group\r\n * @returns {Boolean} True if the user is in the Region Admin group\r\n */\r\nexport const userIsRegionAdmin = createSelector(\r\n userGroupsSelector,\r\n userIsAuthenticated,\r\n (groups, isAuthenticated) => isAuthenticated && groups.includes(REACT_APP_REGION_ADMIN)\r\n)\r\n\r\n/**\r\n * Selector to determine if the user has the SAW group claim\r\n * @returns {Boolean} True if the user has the SAW group claim\r\n */\r\nexport const userIsSAW = createSelector(\r\n userGroupsSelector,\r\n userIsAuthenticated,\r\n (groups, isAuthenticated) => isAuthenticated && groups.includes(REACT_APP_LANDOWNER_GROUP)\r\n)\r\n\r\n//#endregion\r\n\r\n//#region Group Claim Derived Selectors\r\n/**\r\n * Returns whether or not the current user is in a DNR staff group\r\n * @returns {Boolean} The user is in a DNR staff group\r\n */\r\nexport const userIsADFS = createSelector(\r\n userIsSmokeStaff,\r\n userIsSmokeAdmin,\r\n userIsStateGovCust,\r\n userIsRegionStaff,\r\n userIsRegionAdmin,\r\n (isSmokeStaff, isSmokeAdmin, isGovCust, isRegionStaff, isRegionAdmin) =>\r\n isSmokeStaff === true || isSmokeAdmin === true\r\n || isGovCust === true || isRegionStaff === true\r\n || isRegionAdmin === true\r\n)\r\n\r\n/**\r\n * Returns whether or not the current user is in a DNR Region group\r\n * @returns {Boolean} The user is in a DNR Region group\r\n */\r\nexport const userIsRegionUser = createSelector(\r\n userIsRegionStaff,\r\n userIsRegionAdmin,\r\n (isRegionStaff, isRegionAdmin) => \r\n isRegionStaff === true || isRegionAdmin === true\r\n)\r\n\r\n/**\r\n * Returns whether or not the current user is in a Smoke Managment group\r\n * @returns {Boolean} The user is in a Smoke Managment group\r\n */\r\nexport const userIsSmokeMgmt = createSelector(\r\n userIsSmokeStaff,\r\n userIsSmokeAdmin,\r\n (isSmokeStaff, isSmokeAdmin) => \r\n isSmokeStaff === true || isSmokeAdmin === true\r\n)\r\n\r\n/**\r\n * Return the current user's groups\r\n * @returns {Array} The current user's groups\r\n */\r\nexport const currentUserGroupsSelector = createSelector(\r\n userGroupsSelector,\r\n (groups) => {\r\n if (Array.isArray(groups)) {\r\n const usrGroups = groups.map(mapGroupToReadableName).filter(g => !!g)\r\n return usrGroups.sort()\r\n }\r\n return []\r\n }\r\n)\r\n\r\n//#endregion\r\n\r\n//#region User State selectors\r\n\r\n/**\r\n * Returns the current user's username\r\n * @returns {Boolean} The user is in a DNR staff gropu\r\n */\r\nexport const userNameSelector = createSelector(userObjSelector,\r\n ({ userName, isAuthenticated, }) => isAuthenticated && userName ? userName : null \r\n)\r\n\r\n/**\r\n * Return the current user's token\r\n * @returns {string} the current user's api token\r\n */\r\nexport const getUserToken = createSelector(userObjSelector,\r\n ({ token, isAuthenticated, }) => isAuthenticated && token ? token : null\r\n)\r\n\r\n/**\r\n * Return the status of the user information fetch\r\n * @returns {Boolean} true if the user information fetch is in progress\r\n */\r\nconst userIsFetching = createSelector(userObjSelector,\r\n ({ isFetching, }) => isFetching ? isFetching : false\r\n)\r\n\r\n/**\r\n * Return any error captured during login\r\n * @returns {String} the captured login error or null\r\n */\r\nconst loginError = createSelector(userObjSelector,\r\n ({ errorMessage, }) => errorMessage ? errorMessage : null\r\n)\r\n\r\n/**\r\n * Return the current user's network notification preference\r\n * @returns {Boolean} the user's network notification preference\r\n */\r\nexport const userNetworkNotifEnabled = createSelector(userObjSelector,\r\n ({ networkNotificationsEnabled, }) => networkNotificationsEnabled ? networkNotificationsEnabled : false\r\n)\r\n\r\n/**\r\n * Return the current user's Person ID\r\n * @returns {Number} The current user's Person ID or null\r\n */\r\nexport const userPersonIdSelector = createSelector(userObjSelector,\r\n ({ personId, isAuthenticated, }) => \r\n isAuthenticated && personId ? personId : null\r\n)\r\n\r\n/**\r\n * Return the current user's verified agent status\r\n * @returns {Boolean} true if the user is a verified agent\r\n */\r\nconst userIsVerifiedAgent = createSelector(userObjSelector,\r\n ({ isVerifiedAgent, isAuthenticated, }) => \r\n isAuthenticated && isVerifiedAgent ? isVerifiedAgent : false\r\n)\r\n\r\n//#endregion\r\n\r\n//#region ORM User Person selectors\r\n\r\n/**\r\n * Return the current user's associated Person Model\r\n * @returns {Object} the user's person model or null if unavailable \r\n */\r\nexport const userPersonModelSelector = ormSelector(\r\n userPersonIdSelector,\r\n userIsAuthenticated,\r\n ({ Person, }, personId, isAuthenticated) => \r\n isAuthenticated && !isNaN(personId) && Person \r\n ? Person.withId(personId) \r\n : null\r\n)\r\n\r\n/**\r\n * Return the current user's associated Person Type name\r\n * @returns {String} the user's Person Type if available or empty string\r\n */\r\nconst userPersonTypeNameSelector = ormSelector(userPersonModelSelector,\r\n (session, person) => person && person.PersonType ? person.PersonType.PersonTypeName : ''\r\n)\r\n\r\n/**\r\n * Selector to determine if the Agency the current user is a part of is configured\r\n * to pay by voucher or not\r\n * @returns {Boolean}\r\n */\r\nexport const usersAgencyPaysByVoucher = ormSelector(\r\n userPersonIdSelector,\r\n ({ PersonAgencyXref, }, PersonId) => {\r\n const agency = PersonAgencyXref.filter({ PersonAgencyXrefPersonId: PersonId, }).first()\r\n if (!agency || !agency.PersonAgencyXrefAgency) {\r\n return false\r\n }\r\n return agency.PersonAgencyXrefAgency.PaysByVoucher || false\r\n }\r\n)\r\n\r\n/**\r\n * Selector to determine if the current user's person type is Government Agency\r\n * @returns {Boolean} True if the current user's person type is government agency\r\n */\r\nconst userIsGovAgencyType = createSelector(\r\n userPersonTypeNameSelector,\r\n userIsSAW,\r\n (personTypeName, isSAW) => isSAW && personTypeName === PERSON_TYPE_GOV_AGENT\r\n)\r\n\r\n/**\r\n * Selector to determine if the current user's person type is Agent\r\n * @returns {Boolean} True if the current user's person type is agent\r\n */\r\nconst userIsAgentType = createSelector(\r\n userPersonTypeNameSelector,\r\n userIsSAW,\r\n (personTypeName, isSAW) => isSAW && personTypeName === PERSON_TYPE_AGENT\r\n)\r\n\r\n/**\r\n * Selector to determine if the current user's person type is Private\r\n * @returns {Boolean} True if the current user's person type is Private\r\n */\r\nconst userIsPrivateType = createSelector(\r\n userPersonTypeNameSelector,\r\n userIsSAW,\r\n (personTypeName, isSAW) => isSAW && personTypeName === PERSON_TYPE_PRIVATE\r\n)\r\n\r\n/**\r\n * Selector to determine if the current user's person type is DNR Staff\r\n * @returns {Boolean} True if the current user's person type is DNR Staff\r\n */\r\nconst userIsDnrStaffType = createSelector(\r\n userPersonTypeNameSelector,\r\n userIsADFS,\r\n (personTypeName, isADFS) => isADFS && personTypeName === PERSON_TYPE_DNR_STAFF\r\n)\r\n\r\n/**\r\n * Selector to determine if the current user's person type is DNR Staff\r\n * @returns {Boolean} True if the current user's person type is DNR Staff\r\n */\r\nconst userPersonIsGovCustType = createSelector(\r\n userPersonTypeNameSelector,\r\n userIsStateGovCust,\r\n (personTypeName, isStateGovCust) => isStateGovCust && personTypeName === PERSON_TYPE_GOV_CUST\r\n)\r\n\r\n\r\nexport const userIsDNR = createSelector(\r\n userIsSmokeStaff,\r\n userIsSmokeAdmin,\r\n userIsRegionStaff,\r\n userIsRegionAdmin,\r\n userIsDnrStaffType,\r\n (isSmokeStaff, isSmokeAdmin, isRegionStaff, isRegionAdmin, isDNRStaffType) => \r\n (isSmokeStaff || isSmokeAdmin || isRegionStaff || isRegionAdmin) && isDNRStaffType\r\n)\r\n\r\n\r\n/**\r\n * Return the current user's verified agent/agency/state gov customer status\r\n * @returns {Boolean} true if the user is a verified agent\r\n */\r\nexport const userIsUnverifiedAgent = createSelector(\r\n userObjSelector,\r\n userIsAgentType,\r\n userIsGovAgencyType,\r\n userIsSAW,\r\n userIsAuthenticated,\r\n userIsStateGovCust,\r\n ({ isVerifiedAgent, }, isAgent, isGovAgent, isSAWUser, isAuthenticated, isStateGovCust) => \r\n isAuthenticated && ((isSAWUser && (isAgent || isGovAgent)) || isStateGovCust) && !isVerifiedAgent\r\n)\r\n\r\n//#endregion\r\n\r\n/**\r\n * Consolidated selector for User properties\r\n * @returns {Object} authProps An object containing User properties\r\n */\r\nexport const authPropsSelector = createSelector(\r\n userIsAuthenticated,\r\n userIsSmokeAdmin,\r\n userIsDNR,\r\n userIsSAW,\r\n userIsPrivateType,\r\n userIsGovAgencyType,\r\n usersAgencyPaysByVoucher,\r\n userIsAgentType,\r\n userIsVerifiedAgent,\r\n userIsFetching,\r\n loginError,\r\n userPersonIsGovCustType,\r\n userIsADFS,\r\n (isAuthenticated, isAdmin, isDnr, isSAWUser, isPrivate, isGovAgent, paysByVoucher, isAgent, isVerifiedAgent, IsLoadingUser, LoginError, isStateGovCust, isADFS) => {\r\n return {\r\n isAuthenticated,\r\n isAdmin,\r\n isDnr,\r\n isSAWUser,\r\n isPrivate,\r\n isGovAgent,\r\n paysByVoucher,\r\n isAgent,\r\n isVerifiedAgent,\r\n IsLoadingUser,\r\n LoginError,\r\n isStateGovCust,\r\n isADFS,\r\n }\r\n }\r\n)\r\n\r\nconst userHasAddressesSelector = ormSelector(\r\n userPersonIdSelector,\r\n ({ Person, }, personId) => {\r\n if (personId === null || isNaN(personId) || personId < 1) {\r\n return false\r\n }\r\n const person = Person.withId(personId)\r\n if (!person || !person.Addresses) {\r\n return false\r\n }\r\n return person.Addresses.toRefArray().some(o => !o.IsLocal)\r\n }\r\n)\r\n\r\nconst userHasPhonesSelector = ormSelector(\r\n userPersonIdSelector,\r\n ({ Person, }, personId) => {\r\n if (personId === null || isNaN(personId) || personId < 1) {\r\n return false\r\n }\r\n const person = Person.withId(personId)\r\n if (!person || !person.Phones) {\r\n return false\r\n }\r\n return person.Phones.toRefArray().some(o => !o.IsLocal)\r\n }\r\n)\r\n\r\nconst userHasAgencySelector = ormSelector(\r\n userPersonIdSelector,\r\n ({ Person, }, personId) => {\r\n if (personId === null || isNaN(personId) || personId < 1) {\r\n return false\r\n }\r\n const person = Person.withId(personId)\r\n if (!person || !person.Agencies) {\r\n return false\r\n }\r\n return person.Agencies.exists()\r\n }\r\n)\r\n\r\nconst userHasRegionSelector = ormSelector(\r\n userPersonIdSelector,\r\n ({ Person, }, personId) => {\r\n if (personId === null || isNaN(personId) || personId < 1) {\r\n return false\r\n }\r\n const person = Person.withId(personId)\r\n if (!person || !person.Regions) {\r\n return false\r\n }\r\n return person.Regions.exists()\r\n }\r\n)\r\n\r\nexport const profileStatusSelector = createSelector(\r\n userPersonModelSelector,\r\n userIsPrivateType,\r\n userIsAgentType,\r\n userIsGovAgencyType,\r\n userIsSAW,\r\n userIsDNR,\r\n userIsStateGovCust,\r\n userIsFetching,\r\n userHasAddressesSelector,\r\n userHasPhonesSelector,\r\n userHasRegionSelector,\r\n userHasAgencySelector,\r\n (person, isPrivateType, isAgent, isGovAgent, isSAWUser, isDnr, isStateGov, isFetching, hasAddrs, hasPhones, hasRegion, hasAgency) => {\r\n // Don't show the alert if we don't know anything about the person yet\r\n if (isFetching || !person) {\r\n return { IsComplete: true, }\r\n }\r\n // All users need at least the Contact Method and one or more Phones\r\n const status = {\r\n HasPersonType : isPrivateType || isAgent || isGovAgent || isDnr || isStateGov,\r\n HasContactMethod : person.ContactMethodId > 0,\r\n HasPhones : hasPhones,\r\n }\r\n\r\n if (isDnr) {\r\n // DNR Users also need a Region\r\n status.HasRegion = hasRegion\r\n }\r\n \r\n if (isSAWUser) {\r\n status.HasAddresses = hasAddrs\r\n if (isAgent || isGovAgent) {\r\n status.HasAgency = hasAgency\r\n }\r\n }\r\n // If every value is true, then the profile is complete\r\n status.IsComplete = Object.values(status).every(v => v === true)\r\n return status\r\n }\r\n)","// Libraries\r\nimport { put, select, } from 'redux-saga/effects'\r\n\r\n// Reducers\r\nimport { AppTypes, } from '../redux/AppRedux'\r\n\r\n// Selectors\r\nimport { showLoadingSelector, } from '../selectors/selectors'\r\n\r\n\r\nexport function* hideLoading () {\r\n const loadingBarIsShowing = yield select(showLoadingSelector)\r\n if (loadingBarIsShowing) {\r\n yield put({ type: AppTypes.HIDE_LOADING, })\r\n }\r\n}\r\n\r\nexport function* showLoading () {\r\n const loadingBarIsShowing = yield select(showLoadingSelector)\r\n if (!loadingBarIsShowing) {\r\n yield put({ type: AppTypes.SHOW_LOADING, })\r\n }\r\n}","// Libraries\r\nimport { put, call, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { doFetch, showError, } from './ApiSagas'\r\n\r\n// Reducers\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { FileTypes, } from '../redux/FileRedux'\r\n\r\n\r\nexport function* downloadFile ({ url, fileName, }) {\r\n try {\r\n\r\n const link = document.createElement('a')\r\n link.target = '_blank'\r\n link.download = fileName\r\n link.href = url\r\n\r\n document.body.appendChild(link)\r\n \r\n link.click()\r\n\r\n setTimeout(() => {\r\n link.parentNode.removeChild(link)\r\n }, 100)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nexport function* uploadFiles ({ url, files, }) {\r\n try {\r\n yield put({ type: FileTypes.FILE_UPLOADING, isUploading: true, })\r\n\r\n if (!url) {\r\n const message = 'You must supply a url to upload files to.'\r\n yield put({ type: ApiTypes.FAILURE, message, })\r\n return { ok: false, responseBody: { error: message, }, }\r\n }\r\n\r\n if (!files || !files.length) {\r\n const message = 'No files provided to upload.'\r\n yield put({ type: ApiTypes.FAILURE, message, })\r\n return { ok: false, responseBody: { error: message, }, }\r\n }\r\n\r\n const fileData = new FormData()\r\n\r\n for (let i = 0, len = files.length; i < len; i++) {\r\n const file = files[i]\r\n fileData.append('files[]', file, file.name)\r\n }\r\n\r\n const body = {\r\n method : 'POST',\r\n body : fileData,\r\n headers : { 'Accept': '*/*', },\r\n }\r\n\r\n const fileResp = yield call(doFetch, url, body)\r\n\r\n yield put({ type: FileTypes.SET_SUCCESSFUL_UPLOAD, successful: fileResp.ok, })\r\n\r\n return fileResp\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put({ type: FileTypes.FILE_UPLOADING, isUploading: false, })\r\n }\r\n}\r\n","// Libraries\r\nimport { put, select, } from 'redux-saga/effects'\r\n\r\n// Reducers\r\nimport { OrmTypes, } from '../redux/OrmRedux'\r\n\r\n// Selectors\r\nimport { newModelSelector, modelByIdSelector, modelExists, getXrefIdsForModel, getLatestDateByModelName, modelsExist, getModelCount, } from '../selectors/modelSelectors'\r\n\r\n// Utilities\r\nimport { isAfter, } from '../utilities'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SHOW_LOGGING, } = process.env\r\n\r\n\r\nexport function* createLocalModel (modelName, props = {}) {\r\n const newModel = yield select(newModelSelector, { modelName, props, })\r\n yield put({\r\n type : OrmTypes.INSERT,\r\n properties : { ...props, IsLocal: true, },\r\n modelName,\r\n })\r\n return newModel\r\n}\r\n\r\nexport function* updateLocalModel (modelName, modelId, updateObj) {\r\n yield put({ type: OrmTypes.UPDATE, modelName, modelId, updateObj, })\r\n return yield select(modelByIdSelector, { modelName, modelId, })\r\n}\r\n\r\nexport function* upsertLocalModel (modelName, properties) {\r\n yield put({ type: OrmTypes.UPSERT, modelName, properties, })\r\n}\r\n\r\nexport function* upsertLocalModels (modelName, records) {\r\n yield put({ type: OrmTypes.UPSERT_RANGE, modelName, records, })\r\n}\r\n\r\nexport function* destroyLocalModel (modelName, modelId) {\r\n const localModel = yield select(modelByIdSelector, { modelName, modelId, })\r\n if (localModel) {\r\n yield put({ type: OrmTypes.DESTROY, modelName, modelId, })\r\n const exists = yield select(modelExists, { modelName, modelId, })\r\n return !exists\r\n }\r\n return false\r\n}\r\n\r\nexport function* destroyLocalModels (modelName, filter) {\r\n // check there are any to destroy first\r\n const localDataExists = yield select(modelsExist, { modelName, filter, })\r\n if (localDataExists) {\r\n yield put({ type: OrmTypes.DESTROY_ALL, modelName, filterObj: filter, })\r\n }\r\n}\r\n\r\nexport function* replaceAll (modelName, objects, filterObj) {\r\n yield put({ type: OrmTypes.REPLACE_ALL, modelName, objects, filterObj, })\r\n const xrefIds = yield select(getXrefIdsForModel, { modelName: modelName, filterObj, })\r\n return xrefIds\r\n}\r\n\r\nexport function* destroyAll (modelName) {\r\n yield put({ type: OrmTypes.DESTROY_ALL, modelName, })\r\n}\r\n\r\n\r\nexport function* serverHasNewerData (modelName, filter, serverData) {\r\n // If a non-array object is provided\r\n if (!Array.isArray(serverData)) {\r\n // Check that it actually has a value and is not null or undefined\r\n if (!serverData) {\r\n if (REACT_APP_SHOW_LOGGING) {\r\n console.warn('No `serverData` provided')\r\n }\r\n return false\r\n }\r\n // Then convert it to an array\r\n serverData = [ serverData, ]\r\n }\r\n\r\n const localModelCount = yield select(getModelCount, modelName, filter)\r\n // If the amount server data is not the same, either more or less,\r\n // then the serverData is newer\r\n if (serverData.length !== localModelCount) {\r\n if (REACT_APP_SHOW_LOGGING) {\r\n console.warn(`Difference in count between local data ${localModelCount} and server data ${serverData.length}`)\r\n }\r\n return true\r\n }\r\n \r\n const latestAppStatusDate = yield select(getLatestDateByModelName, modelName, filter)\r\n // If there is no server data, but there is local data, the data was likely deleted on \r\n // the server, so treat the server data as being newer\r\n if (serverData.length === 0 && latestAppStatusDate) {\r\n if (REACT_APP_SHOW_LOGGING) {\r\n console.warn('Data found locally but no data returned from server.')\r\n }\r\n return true\r\n }\r\n // If there is no object found locally\r\n // and the server has data, then it's definitely new\r\n else if (serverData.length > 0 && !latestAppStatusDate) {\r\n if (REACT_APP_SHOW_LOGGING) {\r\n console.warn(`No local data found for ${modelName}`)\r\n }\r\n return true\r\n }\r\n // If there is both server data and local data, compare the audit dates\r\n const latestServerAppStatusCreateDate = serverData.reduce((latestCreateDate, currentModel) => {\r\n if (isAfter(latestCreateDate, currentModel.CreateDate) || !latestCreateDate) {\r\n return currentModel.CreateDate\r\n }\r\n return latestCreateDate\r\n }, null)\r\n\r\n const latestServerAppStatusUpdateDate = serverData.reduce((latestUpdateDate, currentModel) => {\r\n if (isAfter(latestUpdateDate, currentModel.UpdateDate) || !latestUpdateDate) {\r\n return currentModel.UpdateDate\r\n }\r\n return latestUpdateDate\r\n }, null)\r\n \r\n const hasNewStatuses = isAfter(latestAppStatusDate, latestServerAppStatusCreateDate) || isAfter(latestAppStatusDate, latestServerAppStatusUpdateDate)\r\n return hasNewStatuses\r\n}","// Libraries\nimport { put, call, select, fork, takeEvery, } from 'redux-saga/effects'\nimport StackTrace from 'stacktrace-js'\n\n// Reducers\nimport { AppTypes, } from '../redux/AppRedux'\nimport ApiActions, { ApiTypes, } from '../redux/ApiRedux'\nimport { OrmTypes, } from '../redux/OrmRedux'\n\n// Selectors\nimport { networkStateSelector, checkedLookupDataSelector, } from '../selectors/selectors'\nimport { getModelEndpoint, getLatestDateByModelName, modelByIdSelector, getModelIdAttr, } from '../selectors/modelSelectors'\nimport { getUserToken, } from '../selectors/userSelectors'\n\n// Sagas\nimport { hideLoading, } from './AppSagas'\nimport { downloadFile as FileDownload, } from './FileSagas'\nimport { updateLocalModel, upsertLocalModel, } from './OrmSagas'\n\n// Utilities\nimport { dateFormatter, objHasProp, } from '../utilities'\n\nconst {\n REACT_APP_SERVER_URL,\n REACT_APP_SHOW_LOGGING,\n// eslint-disable-next-line no-undef\n} = process.env\n\n\n/**\n * Uses the Fetch object to issue a request to the provided URL with optional requestBody.\n * If no `headers` are provided in the `requestBody`, it will assume the content and type is json.\n * If no `Authorization` property is set in the `requestBody.headers`, the property will be set with\n * the token returned by the `getUserToken` selector.\n * @param {String} url - The url to fetch\n * @param {Object} requestBody - The body of the fetch request\n * @returns {Object} an object with response and statusCode keys \n */\nexport function* doFetch (url, requestBody = {}) {\n // Both parameters are required, so check for them\n if (!url) {\n yield call(showError, 'Did not receive url parameter for fetch.')\n return\n }\n\n const reqBody = { ...requestBody, }\n\n // If no headers are provided in the requestBody, assume json\n if (objHasProp(reqBody, 'headers') === false) {\n // Otherwise set up the requestBody headers\n reqBody.headers = {\n 'Content-Type': 'application/json',\n }\n }\n\n if (objHasProp(reqBody, 'body') && typeof reqBody.body === 'object' && reqBody.headers['Content-Type'] === 'application/json') {\n reqBody.body = JSON.stringify(reqBody.body)\n }\n\n // For convenience, set up auth headers if none were provided\n if (objHasProp(reqBody.headers, 'Authorization') === false) {\n // Call the user token selector\n const userToken = yield select(getUserToken)\n if (!userToken) {\n console.warn(`Unable to locate user token, may not be able to complete fetch for ${url}`)\n }\n else {\n reqBody.headers.Authorization = `Bearer ${userToken}`\n }\n }\n\n let response = null\n let statusCode = null\n let ok = false\n try {\n response = yield call(fetch, url, reqBody)\n statusCode = response.status\n ok = response.ok\n } catch (error) {\n console.error(`[doFetch]: ${error}`)\n console.error(error)\n response = null\n statusCode = null\n ok = false\n }\n\n let responseBody = null\n if (statusCode && statusCode !== 204) {\n try {\n responseBody = yield call([ response, 'json', ])\n }\n catch (error) {\n responseBody = null\n }\n }\n return { responseBody, statusCode, ok, }\n}\n\nexport function* downloadFile (url, fileName) {\n try {\n\n // Call the user token selector\n const userToken = yield select(getUserToken)\n // If we didn't get an auth token, throw\n if (!userToken) {\n yield call(showError, 'Unable to locate user token, unable to complete fech at ' + url + '.')\n return\n }\n\n const request = {\n headers: {\n 'Authorization': `Bearer ${userToken}`,\n },\n }\n const resp = yield call(fetch, url, request)\n \n if (resp.ok !== true || resp.responseBody === null) {\n yield call(showError, 'An error occurred attempting to download the file. Please contact support.')\n return\n }\n\n const fileCode = yield call([ resp, resp.json, ])\n\n const downloadUrl =`${REACT_APP_SERVER_URL}BurnPermitSignatures/Download/${fileCode.fileCode}`\n const downloadFileName = `${fileName}_${dateFormatter(new Date(), 'YYYY-MM-DD_HH:mm:ss')}.pdf`\n yield fork(FileDownload, { url: downloadUrl, fileName: downloadFileName, })\n }\n catch (error) {\n yield call(showError, error.message)\n }\n}\n\nconst POST_LOG_URL = `${REACT_APP_SERVER_URL}Log/Error`\n\nexport function* logError ({ errorInfo, localState, }) {\n try {\n const requestObj = {\n method : 'POST',\n body : { errorInfo, localState, },\n }\n\n const postLogResp = yield call(doFetch, POST_LOG_URL, requestObj)\n\n if (postLogResp.ok !== true) {\n yield call(showError, postLogResp.responseBody || 'An error occurred while attempting to log the application error.')\n }\n return postLogResp.ok\n }\n catch (error) {\n yield call(showError, error.message)\n }\n}\n\n\n/**\n * Do a fetch with some basic error code checking.\n * Add additional status codes as necessary and error actions\n * @param {String} url \n * @param {Object} body \n * @returns the fetch response\n */\nexport function* fetchAndCheck (url, body) {\n // do the fetch\n const res = yield call(doFetch, url, body)\n \n // pull out the values\n const response = res.responseBody\n const statuscode = res.statusCode\n const ok = res.ok\n\n // if !ok, the request failed\n if (!ok) {\n let error = ''\n // item not found\n if (statuscode === 404 && !response) {\n error = response || 'Could not find an API for ' + url\n }\n // bad request\n else if (statuscode === 400 && !response) {\n error = response || 'Bad Request Response from ' + url\n }\n else if (objHasProp(response, 'error') && !!response.error) {\n error = response.error\n }\n // if it's not 200 OK or 201 Created or 204 No Content it's unexpected\n else {\n error = response || 'Unexpected ' + statuscode + ' response from ' + url\n }\n yield call(showError, error)\n }\n\n return { response, statuscode, res, }\n}\n\n\n/**\n * Function to check if the locally stored model set is concurrent\n * with the server side data.\n * @param {string} requestUrl\n * @param {string} modelName\n */\nexport function* checkModelConcurrency (requestUrl, modelName) {\n // Not all endpoints have this configured yet, but try anyways\n try {\n // Get the latest date\n const latestModelDate = yield select(getLatestDateByModelName, modelName)\n // If no date is found, we can't check if it's concurrent\n if (!latestModelDate) {\n return false\n }\n // Check if models are concurrent\n const response = yield call(doFetch, requestUrl + '/IsConcurrent?date=' + latestModelDate)\n \n // If there's no response, default to false\n return response ? response.responseBody : false\n }\n catch (e) {\n return false\n }\n}\n\n/**\n * Gets the records from the API server and overwrites the local records with the response\n * using the provided local model name\n * @param {string} endpoint\n * @param {string} modelName\n */\nfunction* lookupDataRequest (endpoint, modelName, forceCheck = false) {\n\n let requestUrl = REACT_APP_SERVER_URL + endpoint\n\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.log('requestUrl: ', requestUrl)\n }\n\n const checkedData = yield select(checkedLookupDataSelector)\n const modelHasBeenChecked = checkedData.some(l => l === modelName)\n if (modelHasBeenChecked && forceCheck === false) {\n return true\n }\n\n const modelIsConcurrent = yield call(checkModelConcurrency, requestUrl, modelName)\n if (modelIsConcurrent) {\n return true\n }\n\n const response = yield call(doFetch, requestUrl)\n\n const { responseBody, } = response\n\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.log('response.body: ', responseBody)\n }\n\n if (responseBody) {\n // Add new records\n if(Array.isArray(responseBody)) {\n yield put({ type: OrmTypes.REPLACE_ALL, modelName, objects: responseBody, })\n }\n else {\n yield put({ type: OrmTypes.UPSERT, modelName, properties: responseBody, })\n }\n yield put({ type: ApiTypes.CHECKED_LOOKUP_DATA, modelName, })\n }\n}\n\nexport function* apiUpdate ({ modelName, body, }) {\n try {\n if (!modelName) {\n yield call(showError, 'You must supply at least a `modelName`')\n return\n }\n\n if (body === null || Object.keys(body).length === 0) {\n yield call(showError, 'You must supply at least one key/value for the request body object')\n return\n }\n\n const idAttr = yield select(getModelIdAttr, modelName)\n const modelId = body[idAttr]\n\n let endpoint = yield select(getModelEndpoint, modelName)\n\n if (endpoint.indexOf(REACT_APP_SERVER_URL) === -1) {\n endpoint = `${REACT_APP_SERVER_URL}${endpoint}`\n }\n\n const requestUrl = `${endpoint}/${modelId}`\n\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.log('requestUrl: ', requestUrl)\n }\n\n const { online, } = yield select(networkStateSelector)\n const localModel = yield select(modelByIdSelector, { modelName, modelId, })\n\n if (!localModel.IsLocal) {\n if (!online) {\n yield put({\n type : ApiTypes.CANCEL_SUBMIT,\n action_type : ApiTypes.UPDATE_RECORD_REQUEST,\n url : requestUrl,\n method : 'PUT',\n keyName : idAttr,\n keyValue : modelId,\n })\n }\n yield put(ApiActions.updateRecordRequest(modelName, requestUrl, body, online))\n }\n \n if (!online) {\n yield call(updateLocalModel, modelName, modelId, body)\n }\n }\n catch (error) {\n yield call(showError, error.message)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Get records from the API server using the provided model name value.\n * @param {string} modelName\n */\nexport function* getLookupData ({ modelName, forceCheck = false, }) {\n try {\n const endpoint = yield select(getModelEndpoint, modelName)\n yield call(lookupDataRequest, endpoint, modelName, forceCheck)\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n\nexport function* showError (error) {\n if (error instanceof Error) {\n const stackFrames = yield call(StackTrace.fromError, error)\n console.error('error: ', stackFrames)\n }\n if (typeof error === 'object' && error !== null) {\n error = error.message\n }\n else if (error === null || error === undefined) {\n error = 'An unknown error occurred'\n }\n console.error('error: ', error)\n yield put({ type: ApiTypes.FAILURE, error, })\n}\n\nexport function extractError (resp) {\n let error\n if (!resp) {\n return error\n }\n if (typeof resp.responseBody === 'string') {\n error = resp.responseBody\n }\n else if (typeof resp.responseBody === 'object') {\n if ('error' in resp.responseBody && !!resp.responseBody.error) {\n error = resp.responseBody.error\n }\n else if ('errors' in resp.responseBody && Array.isArray(resp.responseBody.errors) && resp.responseBody.errors.length) {\n error = resp.responseBody.errors.join('\\n\\n')\n }\n else {\n const values = Object.values(resp.responseBody)\n error = ''\n if (values.length) {\n error = [ ...new Set(values), ].join('\\n\\n')\n }\n }\n }\n return error\n}\n\nexport function* extractPayload (resp) {\n try {\n // Responses with status code 204 mean No Content\n // so there is no response body payload\n // to extract\n if (resp.payload.status === 204) {\n return null\n }\n let obj\n if (typeof resp.payload.json === 'function') {\n obj = yield call([ resp.payload, resp.payload.json, ])\n }\n else if (typeof resp.payload === 'object' && ((resp.payload instanceof Response) === false)) {\n obj = resp.payload\n }\n return obj\n }\n catch (error) {\n console.error(error)\n }\n}\n\nexport function* apiSuccess (resp) {\n try {\n const { modelName, showSuccess, } = resp\n const obj = yield call(extractPayload, resp)\n if (obj) {\n // Models created locally will have a `IsLocal` property set to true\n // Now that we're receiving a server response, we want to set that to\n // false as it affects workflows\n obj.IsLocal = false\n yield call(upsertLocalModel, modelName, obj)\n }\n if (showSuccess) {\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\nexport function* apiFail (resp) {\n const responseBody = yield call(extractPayload, resp)\n let error = yield call(extractError, { responseBody, })\n if (!error) {\n error = 'An unknown error was received from the server.'\n }\n yield call(showError, error)\n}\n\nexport function apiResponseIsAuthorized (resp) {\n let auth = true\n if (resp && resp.payload && resp.payload.status === 404) {\n if (resp.payload.url && resp.payload.url.indexOf('Denied') > -1) {\n auth = false\n }\n } \n return auth\n}\n\nexport const ApiSagas = [\n takeEvery(ApiTypes.LOOKUP_DATA, getLookupData),\n takeEvery(ApiTypes.UPDATE_RECORD, apiUpdate),\n takeEvery(ApiTypes.LOG_ERROR, logError),\n takeEvery(ApiTypes.API_SUCCESS, apiSuccess),\n takeEvery(ApiTypes.API_FAIL, apiFail),\n]","import { createSelector, } from 'reselect'\r\nimport { authPropsSelector, userIsSmokeMgmt, } from './userSelectors'\r\n\r\nexport const createAuthSelector = function () {\r\n const args = Array.prototype.slice.call(arguments)\r\n return createSelector(authPropsSelector, ...args)\r\n}\r\n\r\n//#region App selectors\r\n\r\nexport const userMakesPayments = createAuthSelector(\r\n ({ isSAWUser, isVerifiedAgent, isAgent, isDnr, isPrivate, isStateGovCust, isGovAgent, paysByVoucher, }) => {\r\n let allowed = false\r\n if (isDnr) {\r\n allowed = true\r\n }\r\n else if (isStateGovCust) {\r\n allowed = false\r\n }\r\n else if (isSAWUser) {\r\n if (isPrivate) {\r\n allowed = true\r\n }\r\n else if (isAgent && isVerifiedAgent) {\r\n allowed = true\r\n }\r\n else if (isGovAgent && isVerifiedAgent) {\r\n allowed = !paysByVoucher\r\n }\r\n }\r\n return allowed\r\n }\r\n)\r\n\r\nexport const userCanViewAdminMenu = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanCreateNewPermit = createAuthSelector(\r\n ({ isDnr, isSAWUser, isGovAgent, isAgent, isVerifiedAgent, isPrivate, isStateGovCust, }) => {\r\n let allowed = false\r\n if (isDnr || (isStateGovCust && isVerifiedAgent)) {\r\n allowed = true\r\n } else if (isSAWUser) {\r\n if (isPrivate){\r\n allowed = true\r\n } else if ((isAgent || isGovAgent) && isVerifiedAgent) {\r\n allowed = true\r\n }\r\n }\r\n return allowed\r\n }\r\n)\r\n\r\nexport const userCanCreateNewRequest = createAuthSelector(\r\n ({ isDnr, isSAWUser, isGovAgent, isAgent, isVerifiedAgent, isPrivate, isStateGovCust, }) => {\r\n let allowed = false\r\n if (isDnr || (isStateGovCust && isVerifiedAgent)){\r\n allowed = true\r\n } else if (isSAWUser) {\r\n if (isPrivate){\r\n allowed = true\r\n } else if ((isAgent || isGovAgent) && isVerifiedAgent) {\r\n allowed = true\r\n }\r\n }\r\n return allowed\r\n }\r\n)\r\n\r\nexport const userCanUpdatePersonRegion = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanViewPersonRegion = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanVerifyAgents = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanChangeAlertPrefs = createAuthSelector(\r\n ({ isSAWUser, isStateGovCust, }) => isSAWUser || isStateGovCust\r\n)\r\n\r\nexport const userCanViewAgencyAuitData = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanSearchByAssignee = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanViewAppUserData = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userNeedsLandownersOffline = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanEditVerifiedAgentPersonType = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanEditAnyAgency = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanChangeSMDecisionStatus = createAuthSelector(\r\n userIsSmokeMgmt,\r\n ({ isDnr, }, isSmokeMgmt) => isDnr && !isSmokeMgmt\r\n)\r\n\r\n//#endregion\r\n\r\n//#region Profile Person Type Permissions\r\n\r\nexport const userOnlySelectsInternalType = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userOnlySelectsGovCustType = createAuthSelector(\r\n ({ isStateGovCust, }) => isStateGovCust\r\n)\r\n\r\nexport const userOnlySelectsPublicTypes = createAuthSelector(\r\n ({ isSAWUser, }) => isSAWUser\r\n)\r\n\r\n//#endregion\r\n\r\n//#region Person Management Permissions\r\nexport const userCanCreateNewPeople = createAuthSelector(\r\n ({ isDnr, isSAWUser, isAgent, isVerifiedAgent, }) => \r\n isDnr || (isSAWUser && isAgent && isVerifiedAgent)\r\n)\r\n\r\nexport const userCanManageGovCustPeople = createAuthSelector(\r\n ({ isDnr, }) => isDnr \r\n)\r\n\r\nexport const userCanManageAgentPeople = createAuthSelector(\r\n ({ isAgent, isVerifiedAgent, isSAWUser, }) => \r\n isSAWUser && isAgent && isVerifiedAgent \r\n)\r\n\r\nexport const userCanManageAllPeople = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanManageLandowners = createAuthSelector(\r\n ({ isDnr, isSAWUser, isAgent, isVerifiedAgent, }) => \r\n isDnr || (isSAWUser && isAgent && isVerifiedAgent)\r\n)\r\n//#endregion","// Libraries\r\nimport { createSelector, } from 'reselect'\r\n\r\n// Selectors\r\nimport { ormSelector, ormWithPropSelector, ormByIdSelector, } from './selectors'\r\nimport { userNameSelector, } from './userSelectors'\r\nimport { userCanEditAnyAgency, } from './permissionSelectors'\r\n\r\n\r\n/*** State Selectors */\r\n\r\nconst agencyStateSelector = state => state.Agency\r\nconst sessionSelector = session => session\r\n\r\nexport const agencyCurrentIdSelector = createSelector(\r\n agencyStateSelector,\r\n agency => agency ? agency.agencyId : null\r\n)\r\n\r\nexport const agencySavedSelector = createSelector(\r\n agencyStateSelector,\r\n agency => agency ? agency.saved : {}\r\n)\r\n\r\nexport const agencySavingSelector = createSelector(\r\n agencyStateSelector,\r\n agency => agency ? agency.saving : {}\r\n)\r\n\r\nexport const agencyIds = ormSelector(\r\n ({ Agency, }) => {\r\n return Agency.all().toRefArray().map(a => a.AgencyId)\r\n }\r\n)\r\n\r\nexport const userCreatedAgency = ormSelector(\r\n agencyCurrentIdSelector,\r\n userCanEditAnyAgency,\r\n userNameSelector,\r\n ({ Agency, }, AgencyId, isAdmin, userName) => {\r\n // if the user doesn't have a name, stop here\r\n if (!userName) {\r\n return false\r\n }\r\n // if there's no active agency id, they must be creating one\r\n if (!AgencyId || (AgencyId < 1)) {\r\n return true\r\n }\r\n // if we have an agency id and we don't have an agency record\r\n // then we'll wait for it to load\r\n if (!Agency.idExists(AgencyId)) {\r\n return false\r\n }\r\n // if it's a dnr user they can edit anything\r\n if (isAdmin) {\r\n return true\r\n }\r\n // if the agency is created by the user, they can edit\r\n const agency = Agency.withId(AgencyId)\r\n if (agency.CreateBy === userName) {\r\n return true\r\n }\r\n \r\n // otherwise return false\r\n return false\r\n }\r\n)\r\n\r\n/**\r\n * Selector for AgencyContainer, uses current state.agency.agencyId\r\n * to select an Agency with related information.\r\n * @returns {object} the currently selected Agency\r\n */\r\nexport const currentAgencySelector = ormByIdSelector(\r\n agencyCurrentIdSelector,\r\n ({ Agency, }, AgencyId) => {\r\n if (isNaN(AgencyId)) {\r\n return null\r\n }\r\n if (!Agency.idExists(AgencyId)) {\r\n return null\r\n }\r\n const agency = Agency.withId(AgencyId)\r\n return {\r\n AgencyId : agency.AgencyId,\r\n CreateDate : agency.CreateDate || '',\r\n CreateBy : agency.CreateBy || '',\r\n UpdateDate : agency.UpdateDate || '',\r\n UpdateBy : agency.UpdateBy || '',\r\n AgencyName : agency.AgencyName || '',\r\n AgencySubName1 : agency.AgencySubName1 || '',\r\n AgencySubName2 : agency.AgencySubName2 || '',\r\n AgencyOtherName : agency.AgencyOtherName || '',\r\n AgencyAbbreviation : agency.AgencyAbbreviation || '',\r\n AutoRegionApproval : agency.AutoRegionApproval || false,\r\n PaysByVoucher : agency.PaysByVoucher || false,\r\n AddressId : agency.AddressId || '',\r\n EmailId : agency.EmailId || '',\r\n PhoneId : agency.PhoneId || '',\r\n Address : agency.Address ? {\r\n AddressId : agency.Address.AddressId,\r\n StreetLine1 : agency.Address.StreetLine1,\r\n StreetLine2 : agency.Address.StreetLine2 || '',\r\n StreetLine3 : agency.Address.StreetLine3 || '',\r\n AddressCity : agency.Address.AddressCity,\r\n AddressState : agency.Address.AddressState,\r\n AddressZipCode : agency.Address.AddressZipCode,\r\n AddressCountry : agency.Address.AddressCountry || '',\r\n AddressTypeId : agency.Address.AddressTypeId,\r\n CountyId : agency.Address.CountyId,\r\n CreateBy : agency.Address.CreateBy,\r\n CreateDate : agency.Address.CreateDate,\r\n UpdateBy : agency.Address.UpdateBy,\r\n UpdateDate : agency.Address.UpdateDate,\r\n } : null,\r\n Phone: agency.Phone ? {\r\n PhoneId : agency.Phone.PhoneId,\r\n PhoneNumber : agency.Phone.PhoneNumber,\r\n PhoneExtension : agency.Phone.PhoneExtension || '',\r\n PhoneTypeId : agency.Phone.PhoneTypeId,\r\n CreateBy : agency.Phone.CreateBy,\r\n CreateDate : agency.Phone.CreateDate,\r\n UpdateBy : agency.Phone.UpdateBy,\r\n UpdateDate : agency.Phone.UpdateDate,\r\n } : null,\r\n Email: agency.Email ? {\r\n EmailId : agency.Email.EmailId,\r\n EmailAddress : agency.Email.EmailAddress,\r\n CreateBy : agency.Email.CreateBy,\r\n CreateDate : agency.Email.CreateDate,\r\n UpdateBy : agency.Email.UpdateBy,\r\n UpdateDate : agency.Email.UpdateDate,\r\n } : null,\r\n }\r\n }\r\n)\r\n\r\n/**\r\n * Selector for AgencyListContainer, grabs a small amount of\r\n * information to display. Should match the DataTable columns\r\n * defined in the Agency model\r\n */\r\nexport const agenciesForTableSelector = ormSelector(\r\n ({ Agency, }) => {\r\n return Agency.all().toModelArray().map((agency) => {\r\n return {\r\n AgencyId : agency.AgencyId,\r\n AgencyName : agency.AgencyName || '',\r\n AgencyAbbreviation : agency.AgencyAbbreviation,\r\n AutoRegionApproval : agency.AutoRegionApproval,\r\n PaysByVoucher : agency.PaysByVoucher,\r\n Phone : agency.Phone ? agency.Phone.PhoneNumber || '' : '',\r\n Email : agency.Email ? agency.Email.EmailAddress || '' : '',\r\n }\r\n })\r\n }\r\n)\r\n\r\n\r\n/**\r\n * Selector for ApplicantInfoSection, select a minimal amount\r\n * of information about all agences to populate a dropdown.\r\n */\r\nexport const agenciesForSelectSelector = ormWithPropSelector(\r\n ({ Agency, }, filter) => {\r\n const dirs = Agency.all()\r\n if (dirs) {\r\n let models = dirs.toModelArray()\r\n if (typeof filter === 'function') {\r\n models = models.filter(filter)\r\n }\r\n return models.map((a) => {\r\n return {\r\n Value : a.AgencyId,\r\n Text : `${a.AgencyId}: ${a.toString()}`,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\n/**\r\n * Simplified Agency Select by Id selector - only return agency.\r\n * @param {number} AgencyId the agency Id to select.\r\n * @returns {object} the requested Agency with related information.\r\n */\r\nexport const agencySimpleSelector = ormByIdSelector(\r\n ({ Agency, }, AgencyId) => {\r\n if (isNaN(AgencyId)) {\r\n return null\r\n }\r\n if (!Agency.idExists(AgencyId)) {\r\n return null\r\n }\r\n const agency = Agency.withId(AgencyId)\r\n return {\r\n AgencyId : agency.AgencyId,\r\n CreateDate : agency.CreateDate,\r\n CreateBy : agency.CreateBy,\r\n UpdateDate : agency.UpdateDate,\r\n UpdateBy : agency.UpdateBy,\r\n AgencyName : agency.AgencyName,\r\n AgencySubName1 : agency.AgencySubName1,\r\n AgencySubName2 : agency.AgencySubName2,\r\n AgencyOtherName : agency.AgencyOtherName,\r\n AutoRegionApproval : agency.AutoRegionApproval,\r\n PaysByVoucher : agency.PaysByVoucher,\r\n AgencyAbbreviation : agency.AgencyAbbreviation,\r\n AddressId : agency.AddressId,\r\n PhoneId : agency.PhoneId,\r\n EmailId : agency.EmailId,\r\n }\r\n }\r\n)\r\n\r\nexport const allAgencies = createSelector(\r\n sessionSelector,\r\n ({ Agency, }) => {\r\n // Exclude previously merged Agencies\r\n // Merged records shouldn't be returned from the API, but just in case\r\n const agencies = Agency.filter(p => { return !p.ParentId }).all()\r\n return agencies\r\n }\r\n)\r\n\r\nexport const allAgenciesForMerge = ormSelector(\r\n session => {\r\n const agencies = allAgencies(session)\r\n if (agencies.exists()) {\r\n return agencies\r\n .toModelArray()\r\n .map(a => {\r\n let agencyData = {\r\n AgencyId: {\r\n Value : a.AgencyId,\r\n Label : 'Agency ID',\r\n Required : true,\r\n },\r\n AgencyName: {\r\n Value : a.AgencyName,\r\n Label : 'Agency Name',\r\n Required : true,\r\n },\r\n AgencySubName1: {\r\n Value : a.AgencySubName1,\r\n Label : 'Agency SubName 1',\r\n },\r\n AgencySubName2: {\r\n Value : a.AgencySubName2,\r\n Label : 'Agency SubName 2',\r\n },\r\n AgencyOtherName: {\r\n Value : a.AgencyOtherName,\r\n Label : 'Agency Other Name',\r\n },\r\n AgencyAbbreviation: {\r\n Value : a.AgencyAbbreviation,\r\n Label : 'Agency Abbreviation',\r\n },\r\n AutoRegionApproval: {\r\n Value : a.AutoRegionApproval,\r\n Text : a.AutoRegionApproval ? 'Yes': 'No',\r\n Label : 'Auto Region Approval',\r\n },\r\n AddressId: {\r\n Value : a.AddressId,\r\n Text : a.Address ? a.Address.toString() : '',\r\n Label : 'Address',\r\n },\r\n PhoneId: {\r\n Value : a.PhoneId,\r\n Text : a.Phone ? a.Phone.toString() : '',\r\n Label : 'Phone',\r\n },\r\n EmailId: {\r\n Value : a.EmailId,\r\n Text : a.Email ? a.Email.EmailAddress : '',\r\n Label : 'Email',\r\n },\r\n }\r\n return agencyData\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\nexport const agencyForMerge = ormByIdSelector(\r\n allAgenciesForMerge,\r\n ({ Agency, }, agencyId, allAgencies) => {\r\n if (isNaN(agencyId)) {\r\n return null\r\n }\r\n const agency = Agency.withId(agencyId)\r\n if (!agency) {\r\n return null\r\n }\r\n const agencyObj = allAgencies.filter(a => a.AgencyId.Value === agencyId)[0]\r\n if (!agencyObj) {\r\n return null\r\n }\r\n return agencyObj\r\n }\r\n)\r\n\r\nexport const agenciesForMergeSelect = ormSelector(\r\n session => {\r\n const agencies = allAgencies(session)\r\n if (agencies.exists()) {\r\n return agencies\r\n .orderBy('AgencyName')\r\n .toRefArray()\r\n .map(a => {\r\n return {\r\n Value : a.AgencyId,\r\n Text : `${a.AgencyName} ${a.AgencyAbbreviation ? `(${a.AgencyAbbreviation})` : ''}`,\r\n }\r\n })\r\n }\r\n return []\r\n }\r\n)\r\n\r\nexport const agencyPaysByVoucherByPermitId = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit || !permit.Agency) {\r\n return false\r\n }\r\n return permit.Agency.PaysByVoucher || false\r\n }\r\n)\r\n\r\nexport const agencyAutoRegionApprovalByPermitId = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit || !permit.Agency) {\r\n return false\r\n }\r\n return permit.Agency.AutoRegionApproval || false\r\n }\r\n)\r\n","import { createSelector, } from 'reselect'\nimport { ormSelector, ormWithPropSelector, } from './selectors'\nimport { PERSON_TYPE_GOV_AGENT, PERSON_TYPE_AGENT, PERSON_TYPE_GOV_CUST, } from './env'\n\n\n/*** State Selectors */\n\nconst agentStateSelector = state => state.agency\n\nexport const agentCurrentIdSelector = createSelector(\n agentStateSelector,\n agent => agent ? agent.personId : null\n)\n\n/*** ORM Selectors */\n\n/**\n * Selector for ApplicantInfoSection, select a minimal amount\n * of information about all agents to populate a dropdown.\n */\nexport const agentsForSelectSelector = ormWithPropSelector(\n ({ Person, }, filter) => {\n const people = Person.all()\n if (people.exists()) {\n let agents = people.toModelArray().filter(p => p.PersonType && \n (p.PersonType.PersonTypeName === PERSON_TYPE_AGENT\n || p.PersonType.PersonTypeName === PERSON_TYPE_GOV_AGENT\n || p.PersonType.PersonTypeName === PERSON_TYPE_GOV_CUST))\n if (typeof filter === 'function') {\n agents = agents.filter(filter)\n }\n return agents.map((a) => {\n return {\n Value : a.PersonId,\n Text : `${a.PersonId}: ${a.toString()}`,\n }\n })\n }\n return []\n }\n)\n\nexport const agentXrefsSelector = ormSelector(\n ({ PersonAgencyXref, }) => {\n const xrefs = PersonAgencyXref.all()\n if (!xrefs.exists()){\n return []\n }\n return xrefs.toRefArray().map(x => { return {\n PersonAgencyXrefId : x.PersonAgencyXrefId,\n PersonAgencyXrefAgencyId : x.PersonAgencyXrefAgencyId,\n PersonAgencyXrefPersonId : x.PersonAgencyXrefPersonId,\n ConfirmedBy : x.ConfirmedBy,\n ConfirmedOn : x.ConfirmedOn,\n CreateDate : x.CreateDate,\n CreateBy : x.CreateBy,\n UpdateDate : x.UpdateDate,\n UpdateBy : x.UpdateBy,\n }})\n }\n)","import { put, all, call, fork, select, takeLatest, takeEvery, } from 'redux-saga/effects'\nimport { difference, } from 'lodash'\n\n// Reducers\nimport { OrmTypes, } from '../redux/OrmRedux'\nimport { ApiTypes, } from '../redux/ApiRedux'\nimport { AgencyTypes, } from '../redux/AgencyRedux'\nimport { AppTypes, } from '../redux/AppRedux'\nimport { UiTypes, } from '../redux/UiRedux'\nimport { MergeTypes, } from '../redux/MergeRedux'\n\n// Sagas\nimport { fetchAndCheck, getLookupData, doFetch, checkModelConcurrency, showError, } from './ApiSagas'\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { createLocalModel, upsertLocalModels, upsertLocalModel, serverHasNewerData, } from './OrmSagas'\n\n// Selectors\nimport { agencySimpleSelector, agencyIds, } from '../selectors/agencySelectors'\nimport { agentXrefsSelector, } from '../selectors/agentSelectors'\nimport { userIsDNR, } from '../selectors/userSelectors'\nimport { getModelEndpoint, getModelIdAttr, } from '../selectors/modelSelectors'\n\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\nconst AGENCY_ENDPOINT = REACT_APP_SERVER_URL + 'Agencies'\nconst AGENCY_MODEL_NAME = 'Agency'\n\n\nfunction* fail (message, saveType) {\n if (saveType) {\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType, })\n }\n if (message) {\n yield put({ type: ApiTypes.FAILURE, error: message, })\n }\n yield call(hideLoading)\n}\n\n/**\n * Retrieve Agency information by Agency ID, include Address, Email, and Phone Number\n * @param {Object} action - The redux action payload\n * @param {String} action.agencyId - The agency ID to get data for\n */\nexport function* getAllAgencies (forceRefreshFromServer = false, basicInfo = false) {\n try {\n yield call(showLoading)\n if (forceRefreshFromServer === false) {\n const modelIsConcurrent = yield call(checkModelConcurrency, AGENCY_ENDPOINT, AGENCY_MODEL_NAME)\n if (modelIsConcurrent) {\n return true\n }\n }\n let agencyEndpoint = AGENCY_ENDPOINT\n if (basicInfo !== null) {\n agencyEndpoint += `?basicInfo=${basicInfo}`\n }\n let res = yield call(fetchAndCheck, agencyEndpoint)\n const { response, statuscode, } = res\n\n if (statuscode !== 200) {\n throw new Error(response && response.error ? response.error : 'Failed to refresh Agencies.')\n }\n \n if (!Array.isArray(response)) {\n yield call(fail, 'Agencies failed to load.')\n return\n }\n\n // preserve the old xrefs\n const oldXrefs = yield select(agentXrefsSelector)\n\n const storedAgencyIds = yield select(agencyIds)\n const incomingIds = response.map(a => a.AgencyId)\n const agenciesToDelete = difference(storedAgencyIds, incomingIds)\n if (agenciesToDelete.length) {\n yield put({\n type : OrmTypes.DESTROY_RANGE,\n modelName : AGENCY_MODEL_NAME,\n modelIdArray : agenciesToDelete,\n })\n }\n\n // Once the agency object is enriched for redux-orm, upsert it\n const hasNewData = yield call(serverHasNewerData, AGENCY_MODEL_NAME, null, response)\n if (hasNewData) {\n yield call(upsertLocalModels, AGENCY_MODEL_NAME, response)\n }\n\n if (oldXrefs.length) {\n yield put({\n type : OrmTypes.REPLACE_ALL, \n modelName : 'PersonAgencyXref',\n objects : oldXrefs,\n })\n }\n }\n catch (error) {\n yield call(fail, error.message || 'Agencies failed to load.')\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\nexport function* createNewAgency () {\n const newAgency = yield call(createLocalModel, AGENCY_MODEL_NAME)\n yield put({\n type : AgencyTypes.SET_AGENCY_ID,\n agencyId : newAgency.AgencyId,\n isNew : true,\n })\n}\n\n/**\n * Delete an Agency\n */\nexport function* deleteAgency ({ agencyId, }) {\n yield call(showLoading)\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: AGENCY_MODEL_NAME, })\n yield put({ type: AgencyTypes.SAVING, saveType: AGENCY_MODEL_NAME, })\n agencyId = parseInt(agencyId)\n if (!Number.isInteger(agencyId)) {\n yield call(fail, 'Invalid AgencyId provided.', AGENCY_MODEL_NAME )\n return\n }\n // set up the request payload and url\n const request = { method: 'DELETE', }\n\n // POST the object\n let response, statuscode\n try {\n let res = yield call(fetchAndCheck, `${AGENCY_ENDPOINT}/${agencyId}`, request)\n response = res.response\n statuscode = res.statuscode\n }\n catch (error) {\n yield call(fail, 'Failed to delete Agency', AGENCY_MODEL_NAME)\n return\n }\n\n if (statuscode !== 200) {\n yield call(fail, response && response.error ? response.error : 'Failed to delete Agency.', AGENCY_MODEL_NAME)\n return\n }\n\n // Update the agency - server db is already updated\n yield put({\n type : OrmTypes.DESTROY,\n modelName : AGENCY_MODEL_NAME,\n modelId : agencyId,\n })\n \n yield all([\n put({ type: AgencyTypes.SET_AGENCY_ID, agencyId: '', }),\n put({ type: AgencyTypes.SAVED, saveType: AGENCY_MODEL_NAME, }),\n put({ type: AppTypes.HIDE_LOADING, }),\n put({ type: AppTypes.SHOW_SUCCESS, }),\n ])\n \n yield put({ type: AppTypes.REDIRECT_TO, route: '/admin/agencies', })\n}\n\n/**\n * POST a new Agency object, GET the created Agency and set the active Agency\n * @param {Object} action - The redux action\n * @param {Object} action.model - The Agency model to POST\n */\nexport function* createAgency ({ model, }) {\n yield call(showLoading)\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: AGENCY_MODEL_NAME, })\n yield put({ type: AgencyTypes.SAVING, saveType: AGENCY_MODEL_NAME, })\n if (!model) {\n yield call(fail, 'No model object provided.', AGENCY_MODEL_NAME )\n return\n }\n\n // POST the object\n let response, statuscode\n try {\n let res = yield call(doFetch, AGENCY_ENDPOINT, { method: 'POST', body: model, })\n response = res.responseBody\n statuscode = res.statusCode\n }\n catch (error) {\n console.error(error)\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: AGENCY_MODEL_NAME, })\n yield call(fail, 'Failed to create Agency', AGENCY_MODEL_NAME)\n return\n }\n\n if (statuscode !== 201) {\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: AGENCY_MODEL_NAME, })\n yield call(fail, response && response.error ? response.error : 'Failed to refresh Agencies.')\n return\n }\n\n // If we didn't get a response with an Id, stop here\n if (!response || !response.AgencyId) {\n let emsg = 'Did not receive a response with an ID.'\n if (typeof response === 'string') {\n emsg = response\n }\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: AGENCY_MODEL_NAME, })\n yield call(fail, emsg, AGENCY_MODEL_NAME)\n return\n }\n\n // Update the agency - server db is already updated\n yield put({\n type : OrmTypes.UPSERT,\n modelName : AGENCY_MODEL_NAME,\n properties : response,\n })\n \n yield all([\n // Set the new agency ID as active on the agency form\n put({ type: AgencyTypes.SET_AGENCY_ID, agencyId: response.AgencyId, }),\n put({ type: AgencyTypes.SAVED, saveType: 'Agency', }),\n call(hideLoading),\n put({ type: AppTypes.SHOW_SUCCESS, }),\n ])\n yield put({ type: AppTypes.REDIRECT_TO, route: `/admin/agencies/${response.AgencyId}`, })\n}\n\n\n/**\n * Crate an agency-related Address, Email, or Phone Number\n * @param {Object} action - The redux action\n * @param {Object} action.model - The model to create\n * @param {String} action.modelType - Either Email, Address, or Phone \n * @param {int} action.agencyId - The agency ID to assoicate with the object\n */\nexport function* createAgencyObject ({ model, modelType, agencyId, }){\n if (!modelType) {\n yield call(fail, 'Unable to create object without a type specified.')\n return\n }\n if (!agencyId) {\n yield call(fail, 'Unable to create object without an agency ID')\n return\n }\n if (!model) {\n yield call(fail, 'No model object provided.')\n return\n }\n if ((modelType !== 'Email') && (modelType !== 'Address') && (modelType !== 'Phone')) {\n yield call(fail, 'Unable to create ' + modelType, modelType)\n return\n }\n yield call(showLoading)\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: modelType, })\n yield put({ type: AgencyTypes.SAVING, saveType: modelType, })\n\n // POST the object - this sets the agency fk in the database but we \n // still need to update it here \n // These Agency endpoints return the created object\n let response, statuscode, keyProp = yield select(getModelIdAttr, modelType)\n try {\n delete model[keyProp]\n let res = yield call(fetchAndCheck, `${REACT_APP_SERVER_URL}Agencies/${agencyId}/${modelType}`, { method: 'POST', body: model, })\n response = res.response\n statuscode = res.statuscode\n }\n catch (error) {\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: modelType, })\n yield call(fail, 'Failed creating ' + modelType, modelType)\n return\n }\n\n if (statuscode !== 201) {\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: modelType, })\n yield call(fail, response && response.error ? response.error : 'Failed to refresh Agencies.')\n return\n }\n \n // If we didn't get an Id in response something went wrong\n if (!response[keyProp]) {\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: modelType, })\n yield call(fail,'Did not receive a valid response when creating ' + modelType, modelType)\n return\n }\n\n // Upsert the modelType\n yield put({\n type : OrmTypes.UPSERT,\n modelName : modelType,\n properties : response,\n })\n \n // Get the current agency information from ORM\n const agency = yield select(agencySimpleSelector, agencyId)\n if (!agency) {\n yield call(fail,'Unable to retrieve existing agency data.', modelType)\n return\n }\n\n // add the new id\n agency[keyProp] = response[keyProp]\n\n // Update the agency\n yield put({\n type : OrmTypes.UPSERT,\n modelName : AGENCY_MODEL_NAME,\n properties : agency,\n })\n \n yield all([\n put({ type: AgencyTypes.SAVED, saveType: modelType, }),\n call(hideLoading),\n put({ type: AppTypes.SHOW_SUCCESS, }),\n ])\n}\n\nfunction* fetchAgencyDataForMerge ({ agencyId, }) {\n yield call(showLoading)\n yield put({ type: MergeTypes.FETCHING_DATA_FOR_MERGE, isFetchingData: true, })\n yield call(fetchAgencyData, { agencyId, basicInfo: false, })\n yield put({ type: MergeTypes.FETCHING_DATA_FOR_MERGE, isFetchingData: false, })\n yield call(hideLoading)\n}\n\n\n/**\n * Retrieve Agency information by Agency ID, include Address, Email, and Phone Number\n * @param {Object} action - The redux action payload\n * @param {String} action.agencyId - The agency ID to get data for\n * @param {String} action.basicInfo - The agency ID to get data for\n */\nexport function* fetchAgencyData ({ agencyId, basicInfo = true, }) {\n if (!agencyId || agencyId < 1) {\n return\n }\n yield call(showLoading)\n // get response body\n let response, statuscode\n try {\n let res = yield call(fetchAgency, agencyId, basicInfo)\n response = res.response\n statuscode = res.statuscode\n }\n catch (error) {\n yield call(fail, 'Failed to retreive agency data.')\n return\n }\n\n if (statuscode !== 200) {\n yield call(fail, response && response.error ? response.error : 'Failed to retreive agency data.')\n return\n }\n\n const { AddressId, EmailId, PhoneId, } = response\n const contactReqs = []\n // if we have an ID it should be good, so get it\n if (EmailId) {\n contactReqs.push(call(getAgencyObject, EmailId, 'Email'))\n }\n\n if (AddressId) {\n contactReqs.push(call(getAgencyObject, AddressId, 'Address', 'AddressType'))\n }\n\n if (PhoneId) {\n contactReqs.push(call(getAgencyObject, PhoneId, 'Phone', 'PhoneType'))\n }\n\n if (contactReqs.length) {\n yield all(contactReqs)\n }\n\n const userIsDnr = yield select(userIsDNR)\n if (userIsDnr) {\n const resp = yield call(doFetch, `${REACT_APP_SERVER_URL}Agencies/${agencyId}/People`)\n if (!resp.ok) {\n yield call(showError, 'Could not retrieve Agents for the selected Agency')\n }\n else {\n const xrefs = resp.responseBody.map(p => {\n return {\n PersonAgencyXrefId : p.PersonAgencyXrefId,\n PersonAgencyXrefAgencyId : agencyId,\n PersonAgencyXrefPersonId : p.PersonId,\n }\n })\n const xrefIds = xrefs.map(x => x.PersonAgencyXrefId)\n const filter = x => xrefIds.includes(x.PersonAgencyXrefId)\n const hasNewData = yield call(serverHasNewerData, 'PersonAgencyXref', filter, resp.responseBody)\n if (hasNewData) {\n yield call(upsertLocalModels, 'PersonAgencyXref', xrefs)\n }\n }\n }\n \n const hasNewData = yield call(serverHasNewerData, AGENCY_MODEL_NAME, { AgencyId: agencyId, EmailId, PhoneId, AddressId, }, response)\n if (hasNewData) {\n // Once the agency object is enriched for redux-orm, upsert it\n yield call(upsertLocalModel, AGENCY_MODEL_NAME, response)\n }\n\n yield call(hideLoading)\n}\n\n\nexport function* getAgencyObject (id, model, lookupDataModel) {\n try {\n if (lookupDataModel) {\n // Ensure we have the model types loaded\n yield call(getLookupData, { modelName: lookupDataModel, })\n }\n\n const endpoint = yield select(getModelEndpoint, model)\n\n const { response, statuscode, } = yield call(fetchAndCheck, `${REACT_APP_SERVER_URL}${endpoint}/${id}`)\n if (statuscode !== 200) {\n yield call(fail, response && response.error ? response.error : `Failed to retreive Agency ${model} data.`)\n return\n }\n const modelIdAttr = yield select(getModelIdAttr, model)\n const hasNewData = yield call(serverHasNewerData, model, { [modelIdAttr]: id, }, response)\n if (hasNewData) {\n yield fork(upsertLocalModel, model, response)\n }\n }\n catch (error) {\n yield call(fail, `Failed to retreive Agency ${model} data.`)\n return\n }\n}\n\n\n/**\n * Helper to fetch an agency by id\n * @param {int} agencyId \n * @returns {Object} The fetch response\n */\nexport function* fetchAgency (agencyId, basicInfo = true) {\n // set up the initial agency request\n const endpoint = `${REACT_APP_SERVER_URL}Agencies/${agencyId}?basicInfo=${basicInfo ? 1 : 0}`\n const body = { method: 'GET', }\n\n // get response body or throw\n return yield call(fetchAndCheck, endpoint, body)\n}\n\nexport function* createAgencyObjects ({ agencyId, address, email, phone, }) {\n yield all([\n call(createAgencyObject, {\n model : address, \n modelType : 'Address', \n agencyId,\n }),\n call(createAgencyObject, {\n model : email,\n modelType : 'Email',\n agencyId,\n }),\n call(createAgencyObject, {\n model : phone,\n modelType : 'Phone',\n agencyId,\n }),\n ])\n}\n\n\n/**\n * Update an agency-related Address, Email, or Phone Number\n * @param {Object} action - The redux action\n * @param {Object} action.model - The model to create\n * @param {String} action.modelType - Either Email, Address, or Phone \n * @param {int} action.agencyId - The agency ID to assoicate with the object\n */\nexport function* updateAgencyObject ({ model, modelType, modelId, agencyId, }) {\n\n if (!modelType) {\n yield call(fail, 'Unable to update object without a type specified.')\n return\n }\n if ((modelType !== 'Email') && (modelType !== 'Address') && (modelType !== 'Phone')) {\n yield call(fail, `${modelType} is not a valid Agency Object`)\n return\n }\n\n if (!agencyId) {\n yield call(fail, `Unable to update ${modelType} without an agency ID`)\n return\n }\n if (!model) {\n yield call(fail, `Unable to update ${modelType} data`)\n return\n }\n\n yield all([\n put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: modelType, }),\n put({ type: AgencyTypes.SAVING, saveType: modelType, }),\n call(showLoading),\n ])\n\n try {\n const modelEndpoint = yield select(getModelEndpoint, modelType)\n const { response, statuscode, } = yield call(fetchAndCheck, `${REACT_APP_SERVER_URL}${modelEndpoint}/${modelId}`, { method: 'PUT', body: model, })\n\n if (statuscode !== 204) {\n yield call(fail, response && response.error ? response.error : 'Failed updating ' + modelType, modelType)\n return\n }\n }\n catch (error) {\n yield call(fail, 'Failed updating ' + modelType, modelType)\n return\n }\n\n yield all([\n call(getAgencyObject, modelId, modelType),\n put({ type: AgencyTypes.SAVED, saveType: modelType, }),\n call(hideLoading),\n put({ type: AppTypes.SHOW_SUCCESS, }),\n ])\n}\n\n\n/**\n * PUT a an Agency object, GET the updated Agency\n * @param {Object} action - The redux action\n * @param {Object} action.model - The Agency model to POST\n */\nexport function* updateAgency ({ model, agencyId, }) {\n yield call(showLoading)\n yield put({ type: AgencyTypes.CLEAR_SAVE_STATE, saveType: AGENCY_MODEL_NAME, })\n yield put({ type: AgencyTypes.SAVING, saveType: AGENCY_MODEL_NAME, })\n if (!model) {\n yield call(fail, 'No model object provided to agency update method.', AGENCY_MODEL_NAME)\n return\n }\n if (!agencyId) {\n yield call(fail, 'No agency id provided to agency update method.', AGENCY_MODEL_NAME)\n return\n }\n // set up the request payload and url\n const updateEndpoint = REACT_APP_SERVER_URL + 'Agencies/' + agencyId\n\n try {\n const request = { method: 'PUT', body: model, }\n\n // response should be a NOCONTENT\n const { response, statuscode, } = yield call(fetchAndCheck, updateEndpoint, request)\n\n if (statuscode !== 204) {\n yield call(fail, response && response.error ? response.error : 'Failed to update Agency', AGENCY_MODEL_NAME)\n return\n }\n \n yield all([\n call(fetchAgencyData, { agencyId, basicInfo: false, }),\n put({ type: AgencyTypes.SAVED, saveType: AGENCY_MODEL_NAME, }),\n call(hideLoading),\n put({ type: AppTypes.SHOW_SUCCESS, }),\n ])\n }\n catch (error) {\n yield call(fail, 'Failed to update Agency', AGENCY_MODEL_NAME)\n return\n }\n}\n\n\nexport function* mergeAgencies ({ agency, mergedAgencyId, }) {\n\n yield call(showLoading)\n\n const agencyEndpoint = `${REACT_APP_SERVER_URL}Agencies/${agency.AgencyId}/Merge`\n \n const request = { method: 'PUT', body: { Agency: agency, MergedAgencyId: mergedAgencyId, }, }\n \n try {\n const { statuscode, } = yield call(fetchAndCheck, agencyEndpoint, request)\n\n if (statuscode !== 204) {\n // we do not need to show a failure toast here as the `fetchAndCheck` saga does that for us\n return\n }\n\n yield all([\n put({ type: AppTypes.SHOW_SUCCESS, }),\n // Destroy the local copy of the Agency that was merged\n put({ type: OrmTypes.DESTROY, modelName: 'Agency', modelId: mergedAgencyId, }),\n ])\n yield put({ type: AppTypes.REDIRECT_TO, route: `/admin/agencies/${agency.AgencyId}`, })\n }\n catch (error) {\n yield call(showError, 'Failed merging Agencies.')\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\nexport function* verifyAgencyUser ({ agencyId, personAgencyXrefId, }) {\n yield call(showLoading)\n\n if (!Number.isInteger(personAgencyXrefId)) {\n yield call(fail, 'A valid PersonAgencyXrefId must be provided')\n return\n }\n if (!Number.isInteger(agencyId)) {\n yield call(fail, 'A valid AgencyId must be provided')\n return\n }\n\n // set up the request payload and url\n const updateEndpoint = `${REACT_APP_SERVER_URL}Agencies/${agencyId}/User`\n\n try {\n const request = { method: 'PUT', body: { PersonAgencyXrefId: personAgencyXrefId, }, }\n\n const { response, statuscode, } = yield call(fetchAndCheck, updateEndpoint, request)\n\n if (statuscode !== 200) {\n // we do not need to show a failure toast here as the `fetchAndCheck` saga does that for us\n return\n }\n // Toggle the Active Person to trigger a state update that will allow the orm update to set\n // the relationship so the Verify By/On values show up in the UI after we reactive the person\n yield put({ type: 'ACTIVE_PERSON_ID', personId: -1, })\n\n yield all([\n put({ type: OrmTypes.UPSERT, modelName: 'PersonAgencyXref', properties: response, }),\n put({ type: AppTypes.SHOW_SUCCESS, }),\n ])\n \n const personId = response.PersonAgencyXrefPersonId\n yield put({ type: 'ACTIVE_PERSON_ID', personId, })\n }\n catch (error) {\n yield call(fail, 'Failed to verify Agency User')\n }\n finally {\n yield all([\n call(hideLoading),\n put({ type: UiTypes.CLOSE_MODAL, }),\n ])\n }\n}\n\n/**\n * Get an Agency and related information\n * @param {number} agencyId - The ID of the Agency to request\n * @param {number} basicInfo - The ID of the Agency to request\n */\nexport function* getAgency (agencyId, basicInfo = true) {\n // can't do anything without a person id\n if (!agencyId || agencyId < 1) {\n return\n }\n\n try {\n const { res, response, statuscode, } = yield call(fetchAgency, agencyId, basicInfo)\n if (statuscode !== 200) {\n return\n }\n\n // if response is null, stop here\n if (!response) {\n yield call(showError, 'Did not receive a response for Agency ' + agencyId)\n return\n }\n\n const hasNewData = yield call(serverHasNewerData, AGENCY_MODEL_NAME, { AgencyId: agencyId, }, response)\n if (hasNewData) {\n yield call(upsertLocalModel, AGENCY_MODEL_NAME, response)\n }\n return res\n }\n catch (e) {\n yield call(showError, 'An error occurred requesting Agency ' + agencyId)\n return\n }\n}\n\n\nexport const AgencySagas = [\n takeLatest(AgencyTypes.FETCH_AGENCY_DATA, fetchAgencyData),\n takeLatest(AgencyTypes.FETCH_AGENCY_DATA_FOR_MERGE, fetchAgencyDataForMerge),\n takeLatest(AgencyTypes.GET_ALL_AGENCIES, getAllAgencies),\n takeLatest(AgencyTypes.CREATE_NEW_AGENCY, createNewAgency),\n takeLatest(AgencyTypes.CREATE_AGENCY, createAgency),\n takeLatest(AgencyTypes.DELETE_AGENCY, deleteAgency),\n takeLatest(AgencyTypes.UPDATE_AGENCY, updateAgency),\n takeEvery(AgencyTypes.MERGE_AGENCIES, mergeAgencies),\n takeEvery(AgencyTypes.CREATE_AGENCY_OBJECT, createAgencyObject),\n takeEvery(AgencyTypes.CREATE_AGENCY_OBJECTS, createAgencyObjects),\n takeEvery(AgencyTypes.UPDATE_AGENCY_OBJECT, updateAgencyObject),\n takeLatest(AgencyTypes.VERIFY_AGENCY_USER, verifyAgencyUser),\n]","import { createSelector, } from 'reselect'\n\nimport {\n phoneMapper,\n emailMapper,\n ormSelector,\n ormWithPropSelector,\n ormByIdSelector,\n} from './selectors'\n\n//#region base selectors\n\nconst burnNoticeSubscriberStateSelector = state => state.BurnNoticeSubscriber\n\n//#endregion\n\n//#region mapping methods\n\nexport const burnNoticeSubscriberMapper = p => {\n if (!p) {\n return null\n }\n return {\n BurnNoticeSubscriberId : p.BurnNoticeSubscriberId,\n BurnNoticeSubscriberFirstName : p.BurnNoticeSubscriberFirstName || '',\n BurnNoticeSubscriberLastName : p.BurnNoticeSubscriberLastName || '',\n EmailId : p.EmailId,\n CreateDate : p.CreateDate,\n CreateBy : p.CreateBy,\n UpdateDate : p.UpdateDate,\n UpdateBy : p.UpdateBy,\n }\n}\n\nconst mapBurnNoticeSubscriberForDataTable = p => {\n let burnNoticeSubscriber = {\n BurnNoticeSubscriberId : p.BurnNoticeSubscriberId,\n BurnNoticeSubscriberFirstName : p.BurnNoticeSubscriberFirstName || '',\n BurnNoticeSubscriberLastName : p.BurnNoticeSubscriberLastName || '',\n Email : '',\n Phone : '',\n }\n if (p.Email) {\n burnNoticeSubscriber.Email = p.Email.EmailAddress\n }\n if (p.Phones !== null && p.Phones.exists()) {\n burnNoticeSubscriber.Phone = p.Phones.first().PhoneNumber\n }\n return burnNoticeSubscriber\n}\n\n//#endregion\n\n\n//#region burn notice subscriber selectors\n// Intended for use in a future task\nexport const allBurnNoticeSubscribers = ormSelector(\n ({ BurnNoticeSubscriber, }) => {\n const burnNoticeSubscribers = BurnNoticeSubscriber.all()\n return burnNoticeSubscribers\n }\n)\n\n/**\n * Return the active burn notice subscriber id for the burn notice subscriber form\n * @return {int} The active burn notice subscriber id\n */\nexport const activeBurnNoticeSubscriberFormSelector = createSelector(\n burnNoticeSubscriberStateSelector,\n ({ activeBurnNoticeSubscriber, }) => activeBurnNoticeSubscriber ? activeBurnNoticeSubscriber : -1\n)\n\nexport const burnNoticeSubscriberSelector = ormByIdSelector(\n ({ BurnNoticeSubscriber, }, burnNoticeSubscriberId) => {\n if (isNaN(burnNoticeSubscriberId)) {\n return null\n }\n if (!BurnNoticeSubscriber.idExists(burnNoticeSubscriberId)) {\n return null\n }\n const burnNoticeSubscriber = BurnNoticeSubscriber.withId(burnNoticeSubscriberId)\n return burnNoticeSubscriber\n }\n)\n\nexport const selectBurnNoticeSubscriberIds = ormSelector(\n session => {\n return session.BurnNoticeSubscriber.all().toRefArray().map(p => p.BurnNoticeSubscriberId)\n }\n)\n\nconst DEFAULT_SUBSCRIBER_PHONE = {\n phones : [],\n activeCount : 0,\n total : 0,\n}\n\nexport const burnNoticeSubscriberPhoneSelector = ormWithPropSelector(\n burnNoticeSubscriberStateSelector,\n ({ BurnNoticeSubscriber, }, burnNoticeSubscriberId, burnNoticeSubscriberState) => {\n if (isNaN(burnNoticeSubscriberId)) {\n return DEFAULT_SUBSCRIBER_PHONE\n }\n const burnNoticeSubscriber = BurnNoticeSubscriber.withId(burnNoticeSubscriberId)\n if (!burnNoticeSubscriber) {\n return DEFAULT_SUBSCRIBER_PHONE\n }\n let phones = burnNoticeSubscriber.Phones.toRefArray().map(phoneMapper)\n const total = phones.length\n const activePhones = phones.filter(p => p.Active === true)\n if ('Phones' in burnNoticeSubscriberState.inactiveData && burnNoticeSubscriberState.inactiveData.Phones.activeOnly) {\n phones = activePhones\n }\n return {\n phones,\n activeCount: activePhones.length,\n total,\n }\n }\n)\n\nexport const burnNoticeSubscriberEmailByIdSelector = ormWithPropSelector(\n burnNoticeSubscriberSelector,\n ({ BurnNoticeSubscriber, }, burnNoticeSubscriberId) => {\n if (isNaN(burnNoticeSubscriberId)) {\n return null\n }\n if (!BurnNoticeSubscriber.idExists(burnNoticeSubscriberId)) {\n return null\n }\n const { EmailId, Email, } = BurnNoticeSubscriber.withId(burnNoticeSubscriberId)\n if (Email) {\n return emailMapper(Email)\n }\n if (EmailId > -1) {\n const email = Email.withId(EmailId)\n if (email) {\n return emailMapper(email)\n }\n }\n return null\n }\n)\n\nexport const burnNoticeSubscribersForDatatableSelector = ormSelector(\n ({ BurnNoticeSubscriber, }) => {\n return BurnNoticeSubscriber.all().toModelArray().map(mapBurnNoticeSubscriberForDataTable)\n }\n)\n\nexport const getBurnNoticeSubscriberDataTableCols = ormSelector(\n ({ BurnNoticeSubscriber, }) => BurnNoticeSubscriber.getDataTablesColumns()\n)\n\nexport const burnNoticeSubscriberInactiveData = createSelector(\n burnNoticeSubscriberStateSelector,\n state => {\n return { ...state.inactiveData, }\n }\n)\n","// Libraries\nimport { fork, put, call, all, select, takeEvery, takeLatest, } from 'redux-saga/effects'\nimport { difference, } from 'lodash'\n\n// Sagas\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { fetchAndCheck, getLookupData, doFetch, showError, } from './ApiSagas'\nimport { createLocalModel, destroyLocalModel, destroyLocalModels, upsertLocalModel, replaceAll, serverHasNewerData, upsertLocalModels, } from './OrmSagas'\n\n// Reducers\nimport { OrmTypes, destroyRange, } from '../redux/OrmRedux'\nimport { AppTypes, } from '../redux/AppRedux'\nimport { BurnNoticeSubscriberTypes, } from '../redux/BurnNoticeSubscriberRedux'\n\n// Selectors\nimport { getLatestDateByModelName, modelByIdSelector, } from '../selectors/modelSelectors'\nimport {\n burnNoticeSubscriberPhoneSelector,\n selectBurnNoticeSubscriberIds,\n} from '../selectors/burnNoticeSubscriberSelectors'\nimport { \n networkStateSelector,\n} from '../selectors/selectors'\n\n// Utilities\nimport { objHasProp, } from '../utilities'\n\n// Models\nimport Phone from '../models/Phone'\nimport BurnNoticeSubscriber from '../models/BurnNoticeSubscriber'\n\n// CONSTANTS\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\nconst PHONE_MODEL_NAME = Phone.modelName\nconst BURN_NOTICE_SUBSCRIBER_MODEL_NAME = BurnNoticeSubscriber.modelName\n\nfunction* checkBurnNoticeSubscribersConcurrency (//forceCheck = false, \n forceRefreshFromServer = false, basicInfo = false) {\n try {\n yield call(showLoading)\n \n let endpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscribers`\n if (forceRefreshFromServer === false) {\n let filterObj\n \n const latestBurnNoticeSubscriberDate = yield select(getLatestDateByModelName, BURN_NOTICE_SUBSCRIBER_MODEL_NAME, filterObj)\n \n if (latestBurnNoticeSubscriberDate) {\n const concurrencyEndpoint = endpoint\n const concurrencyResponse = yield call(doFetch, `${concurrencyEndpoint}/IsConcurrent?date=${latestBurnNoticeSubscriberDate}`)\n \n const { responseBody: isConcurrent, } = concurrencyResponse\n if (isConcurrent) {\n return isConcurrent\n }\n }\n }\n\n if (basicInfo !== null) {\n endpoint += `?basicInfo=${basicInfo}`\n }\n \n const response = yield call(doFetch, endpoint)\n \n if (response.ok !== true) {\n const error = response.responseBody || 'Could not retrieve burn notice subscribers'\n yield call(showError, error)\n return null\n }\n \n const { responseBody, } = response\n \n const storedBurnNoticeSubscribers = yield select(selectBurnNoticeSubscriberIds)\n \n const incomingBurnNoticeSubscriberIds = responseBody.map(r => r.BurnNoticeSubscriberId)\n const burnNoticeSubscribersToDelete = difference(storedBurnNoticeSubscribers, incomingBurnNoticeSubscriberIds)\n if (burnNoticeSubscribersToDelete.length) {\n yield call(destroyRange, BURN_NOTICE_SUBSCRIBER_MODEL_NAME, burnNoticeSubscribersToDelete)\n }\n \n yield call(upsertLocalModels, BURN_NOTICE_SUBSCRIBER_MODEL_NAME, responseBody)\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Retrieve all burn notice subscribers and update the local database to reflect the server state\n */\nexport function* getAllBurnNoticeSubscribers ({ forceRefreshFromServer = false, }) {\n const forceCheck = true\n yield call(checkBurnNoticeSubscribersConcurrency, BURN_NOTICE_SUBSCRIBER_MODEL_NAME, forceCheck, forceRefreshFromServer)\n}\n\nexport function* newBurnNoticeSubscriber () {\n const newBurnNoticeSubscriber = yield call(createLocalModel, BURN_NOTICE_SUBSCRIBER_MODEL_NAME)\n yield put({\n type : BurnNoticeSubscriberTypes.ACTIVE_BURN_NOTICE_SUBSCRIBER_ID,\n burnNoticeSubscriberId : newBurnNoticeSubscriber.BurnNoticeSubscriberId,\n })\n}\n\nexport function* createBurnNoticeSubscriber ({ burnNoticeSubscriber, email, }) {\n try {\n const burnNoticeSubscriberEndpoint = REACT_APP_SERVER_URL + 'BurnNoticeSubscribers'\n const formattedBurnNoticeSubscriber = {\n FirstName : burnNoticeSubscriber.BurnNoticeSubscriberFirstName,\n LastName : burnNoticeSubscriber.BurnNoticeSubscriberLastName,\n }\n\n if (email && email.EmailAddress) {\n formattedBurnNoticeSubscriber.Email = {\n EmailAddress: email.EmailAddress,\n }\n }\n\n const request = { method: 'POST', body: formattedBurnNoticeSubscriber, }\n\n const { response, statuscode, } = yield call(fetchAndCheck, burnNoticeSubscriberEndpoint, request)\n \n if (statuscode == 400){\n // Error from server. The fetchAndCheck call will show the error message, so just need to return here\n return null\n }\n\n if (statuscode >= 201) {\n if (Number.isInteger(burnNoticeSubscriber.BurnNoticeSubscriberId)) {\n yield put({\n type : OrmTypes.DESTROY,\n modelName : BURN_NOTICE_SUBSCRIBER_MODEL_NAME,\n modelId : burnNoticeSubscriber.BurnNoticeSubscriberId,\n })\n }\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n return null\n }\n\n if (!response || isNaN(response.BurnNoticeSubscriberId) || response.BurnNoticeSubscriberId < 1) {\n yield call(showError, 'Bad response received from create Burn Notice Subscriber endpoint.')\n return null\n }\n }\n catch (err) {\n yield call(showError, 'Failed creating Burn Notice Subscriber.')\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* updateBurnNoticeSubscriber ({ burnNoticeSubscriber, }) {\n\n yield call(showLoading)\n\n const burnNoticeSubscriberEndpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscribers/${burnNoticeSubscriber.BurnNoticeSubscriberId}`\n \n const request = { method: 'PUT', body: burnNoticeSubscriber, }\n \n try {\n const { statuscode, } = yield call(fetchAndCheck, burnNoticeSubscriberEndpoint, request)\n\n if (statuscode !== 204) {\n return null\n }\n\n const burnNoticeSubscriberId = burnNoticeSubscriber.BurnNoticeSubscriberId\n yield fork(getBurnNoticeSubscriber, { burnNoticeSubscriberId, })\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Get a burn notice subscriber and related information\n * @param {number} action.burnNoticeSubscriberId - The ID of the Burn Notice Subscriber to request\n */\nexport function* getBurnNoticeSubscriber ({ burnNoticeSubscriberId, }) {\n const { online, } = yield select(networkStateSelector)\n if (!online) {\n return null\n }\n\n // can't do anything without a burn notice subscriber id\n if (!burnNoticeSubscriberId || burnNoticeSubscriberId < 1) {\n return null\n }\n\n // get response body or throw\n let burnNoticeSubscriberResponse = null, res\n try {\n const result = yield call(fetchBurnNoticeSubscriber, burnNoticeSubscriberId)\n res = result.res\n burnNoticeSubscriberResponse = result.response\n if (result.statuscode !== 200) {\n return null\n }\n }\n catch (e) {\n yield call(showError, 'An error occurred requesting Burn Notice Subscriber ' + burnNoticeSubscriberId)\n return null\n }\n\n yield call(handleEmail, burnNoticeSubscriberResponse.EmailId)\n\n const hasNewBurnNoticeSubscriberData = yield call(serverHasNewerData, BURN_NOTICE_SUBSCRIBER_MODEL_NAME, { BurnNoticeSubscriberId: burnNoticeSubscriberId, EmailId: burnNoticeSubscriberResponse.EmailId, }, burnNoticeSubscriberResponse)\n if (hasNewBurnNoticeSubscriberData) { \n yield call(upsertLocalModel, BURN_NOTICE_SUBSCRIBER_MODEL_NAME, burnNoticeSubscriberResponse)\n }\n\n yield all([\n call(getLookupData, { modelName: 'PhoneType', }),\n call(getBurnNoticeSubscriberPhones, { burnNoticeSubscriberId, }),\n ])\n\n return res\n}\n\nfunction* getBurnNoticeSubscriberPhones ({ burnNoticeSubscriberId, }) {\n if (!burnNoticeSubscriberId || isNaN(burnNoticeSubscriberId) || burnNoticeSubscriberId < 1) {\n yield call(showError, 'Cannot get Phone Numbers for Burn Notice Subscriber without a Burn Notice Subscriber Id.')\n return null\n }\n\n let endpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscribers/${burnNoticeSubscriberId}/Phones`\n \n try {\n // do the api call\n const { response, statuscode, } = yield call(fetchAndCheck, endpoint)\n if (!response || statuscode !== 200) {\n return null\n }\n\n if (response.length === 0) {\n const localPhones = yield select(burnNoticeSubscriberPhoneSelector, burnNoticeSubscriberId)\n if (localPhones.length) {\n const localPhoneIds = localPhones.map(p => p.PhoneId)\n yield call(destroyLocalModels, PHONE_MODEL_NAME, p => localPhoneIds.includes(p.PhoneId))\n }\n return null\n }\n\n const phoneIds = response.map(r => r.PhoneId)\n const phoneIdFilter = a => { return phoneIds.includes(a.PhoneId) }\n const hasNewData = yield call(serverHasNewerData, PHONE_MODEL_NAME, phoneIdFilter, response)\n if (hasNewData) {\n yield call(replaceAll, PHONE_MODEL_NAME, response, phoneIdFilter)\n }\n // ensure the xrefs map up tho since they don't carry any audit data\n const xrefs = response.map(r => { return { fromBurnNoticeSubscriberId: burnNoticeSubscriberId, toPhoneId: r.PhoneId, } })\n yield call(replaceAll, 'BurnNoticeSubscriberPhones', xrefs, { fromBurnNoticeSubscriberId: burnNoticeSubscriberId, })\n }\n catch (error) {\n yield call(showError, 'Get phones for Burn Notice Subscriber failed.')\n }\n}\n\nexport function* deleteBurnNoticeSubscriberPhone ({ burnNoticeSubscriberId, phoneId, }) {\n if (!burnNoticeSubscriberId || isNaN(burnNoticeSubscriberId) || burnNoticeSubscriberId < 1) {\n yield call(showError, 'Cannot delete Phone Number for Burn Notice Subscriber without a Burn Notice Subscriber Id.')\n return null\n }\n if (!phoneId || isNaN(phoneId) || phoneId < 1) {\n yield call(showError, 'Cannot delete Phone Number for Burn Notice Subscriber without a Phone Number Id.')\n return null\n }\n\n try {\n // check if local model is tagged with IsLocal\n // if it is, do no submit call to api\n const phone = yield select(modelByIdSelector, { modelName: PHONE_MODEL_NAME, modelId: phoneId, })\n if (phone && !phone.IsLocal) {\n const endpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscribers/${burnNoticeSubscriberId}/Phones/${phoneId}`\n const { statuscode, } = yield call(fetchAndCheck, endpoint, { method: 'DELETE', })\n if (statuscode !== 200) {\n return null\n }\n }\n yield call(destroyLocalModel, PHONE_MODEL_NAME, phoneId)\n }\n catch (error) {\n const errorMessage = objHasProp(error, 'message') ? error.message : 'Phone Number delete failed.'\n yield call(showError, errorMessage)\n return null\n }\n}\n\nexport function* createLocalPhoneForBurnNoticeSubscriber ({ burnNoticeSubscriberId, }) {\n const newPhone = yield call(createLocalModel, PHONE_MODEL_NAME)\n yield call(createLocalModel, 'BurnNoticeSubscriberPhones', { fromBurnNoticeSubscriberId: burnNoticeSubscriberId, toPhoneId: newPhone.PhoneId, })\n}\n\nexport function* createBurnNoticeSubscriberPhone ({ burnNoticeSubscriberId, phone, }) {\n if (!phone) {\n yield call(showError, 'Cannot create Phone Number for Burn Notice Subscriber without a Phone Number object.')\n return null\n }\n if (!burnNoticeSubscriberId) {\n yield call(showError, 'Cannot create Phone Number for Burn Notice Subscriber without a Burn Notice Subscriber Id.')\n return null\n }\n\n const endpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscribers/${burnNoticeSubscriberId}/Phones`\n let createdPhone\n try {\n const res = yield call(fetchAndCheck, endpoint, { method: 'POST', body: phone, })\n if (res.statuscode !== 201) {\n return null\n }\n createdPhone = res.response\n }\n catch (error) {\n yield call(showError, 'Phone Number creation failed.')\n return null\n }\n\n if (!createdPhone || !createdPhone.BurnNoticeSubscriberPhoneXrefId) {\n yield call(showError, 'Error in Phone Number creation: did not receive an Phone Number Xref.')\n return null\n }\n \n const { PhoneId, } = phone\n if (!isNaN(PhoneId)) {\n yield call(destroyLocalModel, PHONE_MODEL_NAME, PhoneId)\n }\n\n yield call(upsertLocalModel, PHONE_MODEL_NAME, createdPhone.BurnNoticeSubscriberPhoneXrefPhone)\n\n yield call(upsertLocalModel, 'BurnNoticeSubscriberPhones', { fromBurnNoticeSubscriberId: burnNoticeSubscriberId, toPhoneId: createdPhone.BurnNoticeSubscriberPhoneXrefPhoneId, })\n}\n\nexport function* createBurnNoticeSubscriberEmail ({ burnNoticeSubscriberId, email, }) {\n const burnNoticeSubscriberEmailEndpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscribers/${burnNoticeSubscriberId}/Email`\n \n const request = { method: 'POST', body: email, }\n let response = null\n try {\n const res = yield call(fetchAndCheck, burnNoticeSubscriberEmailEndpoint, request)\n if (res.statuscode !== 201) {\n return null\n }\n response = res.response\n }\n catch (error) {\n yield call(showError, 'Failed creating Burn Notice Subscriber Email.')\n return null\n }\n yield call(upsertLocalModel, 'Email', response)\n yield call(upsertLocalModel, 'BurnNoticeSubscriber', { BurnNoticeSubscriberId: burnNoticeSubscriberId, EmailId: response.EmailId, })\n \n if (!response || isNaN(response.EmailId) || response.EmailId < 1) {\n yield call(showError, 'Bad response recieved from create Burn Notice Subscriber Email endpoint.')\n return null\n }\n return null\n}\n\nexport function* deleteBurnNoticeSubscriberEmail ({ burnNoticeSubscriberId, }) {\n const burnNoticeSubscriberEmailEndpoint = `${REACT_APP_SERVER_URL}BurnNoticeSubscribers/${burnNoticeSubscriberId}/Email`\n let response = null\n \n try {\n const res = yield call(fetchAndCheck, burnNoticeSubscriberEmailEndpoint, { method: 'DELETE', })\n if (res.statuscode !== 200) {\n return null\n }\n response = res.response\n }\n catch (error) {\n yield call(showError, 'Deleting Burn Notice Subscriber Email failed.')\n return null\n }\n\n if (!response) {\n yield call(showError, 'Bad response received from delete Burn Notice Subscriber Email endpoint.')\n return null\n }\n\n const { success, deletedId, } = response\n if (success === false) {\n yield call(showError, 'Deleting Burn Notice Subscriber Email failed.')\n return null\n } \n yield call(destroyLocalModel, 'Email', deletedId)\n}\n\n/**\n * Get and upsert the email address\n * @param {number} emailId - The ID of the Email to request\n */\nfunction* handleEmail (emailId) {\n // quick exit\n if (!emailId) {\n return null\n }\n // set up request\n const endpoint = REACT_APP_SERVER_URL + 'Emails/' + emailId\n // do the request\n const { response, statuscode, } = yield call(fetchAndCheck, endpoint)\n \n if (statuscode !== 200) {\n return null\n }\n\n if (response) {\n const hasNewData = yield call(serverHasNewerData, 'Email', { EmailId: emailId, }, response)\n if (hasNewData) {\n yield call(upsertLocalModel, 'Email', response)\n }\n }\n}\n\n/**\n * Helper to fetch an Burn Notice Subscriber by id\n * @param {number} burnNoticeSubscriberId\n * @returns {Object} The fetch response\n */\nfunction* fetchBurnNoticeSubscriber (burnNoticeSubscriberId) {\n // set up the Burn Notice Subscriber request\n let endpoint = REACT_APP_SERVER_URL + 'BurnNoticeSubscribers/' + burnNoticeSubscriberId\n\n // get response body or throw\n return yield call(fetchAndCheck, endpoint)\n}\n\nexport const BurnNoticeSubscriberSagas = [\n takeLatest(BurnNoticeSubscriberTypes.NEW_BURN_NOTICE_SUBSCRIBER, newBurnNoticeSubscriber),\n takeLatest(BurnNoticeSubscriberTypes.GET_ALL_BURN_NOTICE_SUBSCRIBERS, getAllBurnNoticeSubscribers),\n takeLatest(BurnNoticeSubscriberTypes.GET_BURN_NOTICE_SUBSCRIBER, getBurnNoticeSubscriber),\n\n takeEvery(BurnNoticeSubscriberTypes.CREATE_BURN_NOTICE_SUBSCRIBER, createBurnNoticeSubscriber),\n takeEvery(BurnNoticeSubscriberTypes.DELETE_BURN_NOTICE_SUBSCRIBER_PHONE, deleteBurnNoticeSubscriberPhone),\n takeEvery(BurnNoticeSubscriberTypes.CREATE_LOCAL_PHONE_FOR_BURN_NOTICE_SUBSCRIBER, createLocalPhoneForBurnNoticeSubscriber),\n takeEvery(BurnNoticeSubscriberTypes.CREATE_BURN_NOTICE_SUBSCRIBER_PHONE, createBurnNoticeSubscriberPhone),\n takeEvery(BurnNoticeSubscriberTypes.CREATE_BURN_NOTICE_SUBSCRIBER_EMAIL, createBurnNoticeSubscriberEmail),\n takeEvery(BurnNoticeSubscriberTypes.DELETE_BURN_NOTICE_SUBSCRIBER_EMAIL, deleteBurnNoticeSubscriberEmail),\n takeEvery(BurnNoticeSubscriberTypes.UPDATE_BURN_NOTICE_SUBSCRIBER, updateBurnNoticeSubscriber),\n]\n","import { createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getAllRegions : [ 'regionsOnly', ],\n getRegion : [ 'regionId', ],\n})\n\nexport const RegionTypes = Types\nexport default Creators","// Libraries\nimport { fork, call, all, takeLatest, } from 'redux-saga/effects'\n\n// Sagas\nimport { fetchAndCheck, getLookupData, showError, checkModelConcurrency, } from './ApiSagas'\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { upsertLocalModels, upsertLocalModel, } from './OrmSagas'\n\n// Reducers\nimport { RegionTypes, } from '../redux/RegionsRedux'\n\n// Models\nimport Region from '../models/Region'\n\n// CONSTANTS\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nconst REGION_ENDPOINT =`${REACT_APP_SERVER_URL}Regions`\nconst REGION_MODEL_NAME = Region.modelName\n\n/**\n * Get all regions\n */\nexport function* GetAllRegions (args) {\n try {\n let regionsOnly = false\n if (!!args && 'regionsOnly' in args) {\n regionsOnly = args.regionsOnly || false\n }\n const isConcurrent = yield call(checkModelConcurrency, REGION_ENDPOINT, REGION_MODEL_NAME)\n if (isConcurrent) {\n return isConcurrent\n }\n\n yield call(showLoading)\n const { response, statuscode, } = yield call(fetchAndCheck, `${REGION_ENDPOINT}?regionsOnly=${regionsOnly}`)\n\n if (statuscode !== 200 || !response || !Array.isArray(response)) {\n yield call(showError, response && response.error ? response.error : 'Failed retrieving Region data.')\n }\n\n const ormObjs = { Address: [], Phone: [], Email: [], Region: [], PersonRegionXref: [], }\n response.forEach((r) => {\n if (r.RegionEmail) {\n ormObjs.Email.push(r.RegionEmail)\n }\n if (r.RegionAddress) {\n ormObjs.Address.push(r.RegionAddress)\n }\n if (r.RegionPhone) {\n ormObjs.Phone.push(r.RegionPhone)\n }\n if (r.PersonRegionXref && Array.isArray(r.PersonRegionXref)) {\n ormObjs.PersonRegionXref = ormObjs.PersonRegionXref.concat(r.PersonRegionXref)\n }\n delete r['RegionEmail']\n delete r['RegionAddress']\n delete r['RegionPhone']\n delete r['PersonRegionXref']\n ormObjs.Region.push(r)\n })\n\n yield all([\n call(getLookupData, { modelName: 'County', }),\n call(getLookupData, { modelName: 'AddressType', }),\n call(getLookupData, { modelName: 'PhoneType', }),\n ])\n \n const objs = Object.entries(ormObjs)\n for (let i = 0, len = objs.length; i < len; i++) {\n const [ modelName, data, ] = objs[i]\n if (data.length) {\n yield fork(upsertLocalModels, modelName, data)\n }\n }\n }\n catch (e) {\n console.error(e)\n yield call(showError, 'Failed retrieving Region data.')\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Get a region and related information\n * @param {Object} action - the redux action\n * @param {number} action.regionId - the region ID to get\n */\nexport function* GetRegion ({ regionId, }) {\n // can't do anything without a region id\n if (!regionId) {\n yield call(showError, 'Region ID not provided.')\n return\n }\n try {\n // set up the initial region request\n const { response, statuscode, } = yield call(fetchAndCheck, `${REACT_APP_SERVER_URL}Regions/${regionId}`)\n // if response is null, stop here\n if (!response) {\n yield call(showError, 'Did not receive a response for Region ' + regionId)\n return\n }\n \n if (statuscode !== 200) {\n yield call(showError, response && response.error ? response.error : 'Failed retrieving Region data.')\n }\n \n if (response.RegionEmail) {\n yield call(upsertLocalModel, 'Email', response.RegionEmail)\n }\n else if (response.RegionEmailId) {\n yield fork(getRegionContactData, 'Emails', response.RegionEmailId, 'Email')\n }\n \n if (response.RegionAddress) {\n yield call(upsertLocalModel, 'Address', response.RegionAddress)\n }\n else if (response.RegionAddressId) {\n yield fork(getRegionContactData, 'Addresses', response.RegionAddressId, 'Address')\n }\n \n if (response.RegionPhone) {\n yield call(upsertLocalModel, 'Phone', response.RegionPhone)\n }\n else if (response.RegionPhoneId) {\n yield fork(getRegionContactData, 'Phones', response.RegionPhoneId, 'Phone')\n }\n \n delete response['RegionEmail']\n delete response['RegionPhone']\n delete response['RegionAddress']\n \n // start a bunch of tasks in parallel\n yield all([\n call(upsertLocalModel, REGION_MODEL_NAME, response),\n call(getLookupData, { modelName: 'County', }),\n call(getLookupData, { modelName: 'AddressType', }),\n call(getLookupData, { modelName: 'PhoneType', }),\n ])\n }\n catch (e) {\n yield call(showError, 'An error occurred requesting Region ' + regionId)\n return\n }\n}\n\nfunction* getRegionContactData (urlMod, urlId, model) {\n try {\n const { response, statuscode, } = yield call(fetchAndCheck, `${REACT_APP_SERVER_URL}${urlMod}/${urlId}`)\n if (statuscode !== 200 || !response) {\n yield call(showError, response && response.error ? response.error : `An error occurred requesting Region ${model} data`)\n }\n yield call(upsertLocalModel, model, response)\n }\n catch (e) {\n yield call(showError, `Failed to retrieve Region ${model} data.`)\n return\n }\n}\n\nexport const RegionSagas = [\n takeLatest(RegionTypes.GET_ALL_REGIONS, GetAllRegions),\n takeLatest(RegionTypes.GET_REGION, GetRegion),\n]","import { createActions, } from 'reduxsauce'\nimport BurnPermitLocation from '../models/BurnPermitLocation'\n\nconst BURN_PERMIT_LOCATION_ENDPOINT = BurnPermitLocation.endpoint()\nconst BURN_PERMIT_LOCATION_MODEL_NAME = BurnPermitLocation.modelName\n\nconst { Types, Creators, } = createActions({\n getLocationLookupData : null,\n getBurnLocationInfo : [ 'burnPermitLocationId', ],\n updateBurnPermitLocationLegalDesc : [ 'burnPermitLocation', ],\n updateBurnPermitLocationLegalDescRequest : (burnPermitLocation, showSuccess) => ({\n type : 'UPDATE_BURN_PERMIT_LOCATION_LEGAL_DESC_REQUEST',\n meta : {\n offline: {\n effect: {\n url : `${BURN_PERMIT_LOCATION_ENDPOINT}/PutLegalLocationDescription/${burnPermitLocation.BurnPermitLocationId}`,\n init : { method: 'PUT', body: { ...burnPermitLocation, }, },\n },\n commit : { type: 'API_SUCCESS', modelName: BURN_PERMIT_LOCATION_MODEL_NAME, showSuccess, },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n updateBurnPermitLocationLatLong : [ 'burnPermitLocation', ],\n updateBurnPermitLocationLatLongRequest : (burnPermitLocation, showSuccess) => ({\n type : 'UPDATE_BURN_PERMIT_LOCATION_LAT_LONG_REQUEST',\n meta : {\n offline: {\n effect: {\n url : `${BURN_PERMIT_LOCATION_ENDPOINT}/PutLatitudeLongitude/${burnPermitLocation.BurnPermitLocationId}`,\n init : { method: 'PUT', body: { ...burnPermitLocation, }, },\n },\n commit : { type: 'API_SUCCESS', modelName: BURN_PERMIT_LOCATION_MODEL_NAME, showSuccess, },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n updateBurnPermitLocationAdditionalInfo : [ 'burnPermitLocation', ],\n updateBurnPermitLocationAdditionalInfoRequest : (burnPermitLocation, showSuccess) => ({\n type : 'UPDATE_BURN_PERMIT_LOCATION_ADDITIONAL_INFO_REQUEST',\n meta : {\n offline: {\n effect: {\n url : `${BURN_PERMIT_LOCATION_ENDPOINT}/PutAdditionalLocationInfo/${burnPermitLocation.BurnPermitLocationId}`,\n init : { method: 'PUT', body: { ...burnPermitLocation, }, },\n },\n commit : { type: 'API_SUCCESS', modelName: BURN_PERMIT_LOCATION_MODEL_NAME, showSuccess, },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n createBurnLocationAddress : [ 'BurnPermitLocationId', 'Address', ],\n deleteBurnLocationAddress : [ 'BurnPermitLocationId', 'AddressId', ],\n processBurnLocationAddressRequest : (BurnPermitLocationId, address, method, showSuccess) => ({\n type : 'PROCESS_BURN_PERMIT_LOCATION_ADDRESS_REQUEST',\n meta : {\n offline: {\n effect: {\n url : `${BURN_PERMIT_LOCATION_ENDPOINT}/${BurnPermitLocationId}/Address${method !== 'POST' ? `/${address.AddressId}`: ''}`,\n init : { method, body: { ...address, }, },\n },\n commit : { type: 'LOCATION_ADDRESS_REQUEST_SUCCESS', BurnPermitLocationId, AddressId: address.AddressId, showSuccess, delete: (method === 'DELETE'), },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n locationAddressRequestSuccess: [ 'payload', ],\n})\n\nexport const BurnPermitLocationTypes = Types\nexport default Creators","// Libraries\r\nimport { all, put, call, fork, select, takeEvery, takeLatest, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { apiSuccess, getLookupData, doFetch, showError, } from './ApiSagas'\r\nimport { destroyLocalModel, updateLocalModel, upsertLocalModel, upsertLocalModels, createLocalModel, } from './OrmSagas'\r\nimport { GetAllRegions, } from './RegionSagas'\r\n\r\n// Reducers\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\r\nimport BurnPermitLocationActions, { BurnPermitLocationTypes, } from '../redux/BurnPermitLocationRedux'\r\nimport { GeoCoordinateTypes, } from '../redux/GeoCoordinateRedux'\r\n\r\n// Models\r\nimport BurnPermitLocation from '../models/BurnPermitLocation'\r\nimport BurnPermitSearch from '../models/BurnPermitSearch'\r\nimport Address from '../models/Address'\r\n\r\n// Selectors\r\nimport {\r\n permitLocationByIdSelector,\r\n networkStateSelector,\r\n getBurnPermit,\r\n getBurnPermitId,\r\n} from '../selectors/selectors'\r\nimport {\r\n modelByIdSelector,\r\n getModelIdAttr,\r\n} from '../selectors/modelSelectors'\r\n\r\n// Constants\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nconst ADDRESS_MODEL_NAME = Address.modelName\r\nconst ADDRESS_ENDPOINT = Address.endpoint()\r\nconst BURN_PERMIT_LOCATION_ENDPOINT = BurnPermitLocation.endpoint()\r\nconst BURN_PERMIT_LOCATION_MODEL_NAME = BurnPermitLocation.modelName\r\nconst LOCATION_ID_NAME = BurnPermitLocation.options.idAttribute\r\nconst BURN_PERMIT_SEARCH_MODEL_NAME = BurnPermitSearch.modelName\r\n\r\nfunction* getBurnLocationLookupData () {\r\n // The getLookupData saga will update the ORM for us\r\n // so we don't need to worry about the response\r\n yield fork(getLookupData, { modelName: 'LocationQuarter', })\r\n yield fork(getLookupData, { modelName: 'Direction', })\r\n yield fork(GetAllRegions)\r\n yield fork(getLookupData, { modelName: 'County', })\r\n yield fork(getLookupData, { modelName: 'FireDistrictDepartment', })\r\n}\r\n\r\n/**\r\n * Get the Burn Permit Location information for the provided Burn Permit Location ID.\r\n * Will also request the lookup data to map the statuses to for the controls\r\n * @param {number} burnPermitId\r\n */\r\nexport function* getBurnLocationInfo ({ burnPermitLocationId, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online) {\r\n return\r\n }\r\n\r\n if (!burnPermitLocationId) {\r\n yield call(showError, 'You must provide a Burn Permit Location ID in order to retrieve Location Information.')\r\n return\r\n }\r\n\r\n yield put({ type: GeoCoordinateTypes.RESET_GEO_COORDINATE, })\r\n \r\n yield fork(getBurnLocationLookupData)\r\n\r\n // Creates the Burn Permit Location Urls\r\n const permitLocationUrl = `${BURN_PERMIT_LOCATION_ENDPOINT}/${burnPermitLocationId}`\r\n \r\n const permitLocationResp = yield call(doFetch, permitLocationUrl)\r\n // If it's not an Ok, 200, or 404 response, throw an Error\r\n if (permitLocationResp.ok === false) {\r\n yield call(showError, `An error occurred fetching the Burn Permit Location Information for ID: ${burnPermitLocationId}.`)\r\n return\r\n }\r\n\r\n permitLocationResp.responseBody.IsLocal = false\r\n\r\n const { AddressId, } = permitLocationResp.responseBody\r\n if (AddressId) {\r\n const address = yield call(doFetch, `${REACT_APP_SERVER_URL}Addresses/${AddressId}`)\r\n if (address.ok && address.responseBody) {\r\n yield call(upsertLocalModel, ADDRESS_MODEL_NAME, address.responseBody, true)\r\n }\r\n else {\r\n yield call(showError, (address.responseBody || 'Did not receive a valid Address response'))\r\n }\r\n }\r\n\r\n // Upsert the Burn Permit Location Info\r\n yield call(upsertLocalModel, BURN_PERMIT_LOCATION_MODEL_NAME, permitLocationResp.responseBody, true)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nexport function* downloadBurnLocationInfo () {\r\n try {\r\n const downloadResp = yield call(doFetch, `${BURN_PERMIT_LOCATION_ENDPOINT}/Download`)\r\n // If it's not an Ok, 200, or 404 response, throw an Error\r\n if (downloadResp.ok === false) {\r\n yield call(showError, 'An error occurred downloading the Burn Permit Location Information.')\r\n return\r\n }\r\n\r\n const {\r\n permitLocations,\r\n addresses,\r\n } = downloadResp.responseBody\r\n\r\n if (Array.isArray(addresses) && addresses.length) {\r\n const addrs = []\r\n for (let i = 0, len = addresses.length; i < len; i++) {\r\n addrs.push({ ...addresses[i], IsLocal: false, })\r\n }\r\n yield call(upsertLocalModels, ADDRESS_MODEL_NAME, addrs)\r\n }\r\n\r\n if (Array.isArray(permitLocations) && permitLocations.length) {\r\n const locs = []\r\n for (let i = 0, len = permitLocations.length; i < len; i++) {\r\n locs.push({ ...permitLocations[i], IsLocal: false, })\r\n }\r\n yield call(upsertLocalModels, BURN_PERMIT_LOCATION_MODEL_NAME, locs)\r\n }\r\n\r\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'LocationInfo', status: true, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* processBurnLocationAddress ({ BurnPermitLocationId, Address, method, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n const { AddressId, } = Address\r\n let localLocation = yield select(modelByIdSelector, { modelName: BURN_PERMIT_LOCATION_MODEL_NAME, modelId: BurnPermitLocationId, })\r\n\r\n if (!localLocation.IsLocal) {\r\n if (!online) {\r\n const idAttr = yield select(getModelIdAttr, ADDRESS_MODEL_NAME)\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : BurnPermitLocationTypes.PROCESS_BURN_PERMIT_LOCATION_ADDRESS_REQUEST,\r\n url : `${BURN_PERMIT_LOCATION_ENDPOINT}/${BurnPermitLocationId}/Address${method !== 'POST' ? `/${AddressId}`: ''}`,\r\n method : method,\r\n keyName : idAttr,\r\n keyValue : AddressId,\r\n })\r\n }\r\n if (method === 'POST' && 'AddressId' in Address) {\r\n delete Address.AddressId\r\n }\r\n yield put(BurnPermitLocationActions.processBurnLocationAddressRequest(BurnPermitLocationId, Address, method, online))\r\n }\r\n \r\n if (!online) {\r\n let addressId = AddressId || null\r\n if (method === 'DELETE') {\r\n yield call(destroyLocalModel, ADDRESS_MODEL_NAME, Address.AddressId)\r\n }\r\n else {\r\n const localAddress = yield createLocalModel(ADDRESS_MODEL_NAME, Address)\r\n // Set the new Address Id\r\n addressId = localAddress.AddressId\r\n }\r\n yield call(updateLocationForAddress, BurnPermitLocationId, addressId)\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* locationAddressSuccess (resp) {\r\n try {\r\n if (resp.delete && resp.AddressId) {\r\n yield call(destroyLocalModel, ADDRESS_MODEL_NAME, resp.AddressId)\r\n }\r\n else {\r\n const address = yield call([ resp.payload, resp.payload.json, ])\r\n if (address) {\r\n yield call(upsertLocalModel, ADDRESS_MODEL_NAME, address)\r\n yield call(updateLocationForAddress, resp.BurnPermitLocationId, address.AddressId)\r\n }\r\n }\r\n\r\n if (resp.showSuccess) {\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* updateLocationForAddress (BurnPermitLocationId, AddressId) {\r\n // Get the Burn Permit Location Record\r\n const burnPermLoc = yield select(permitLocationByIdSelector, BurnPermitLocationId)\r\n burnPermLoc.AddressId = AddressId // AddressId can be null\r\n // Update the Burn Permit Location Record to set or remove the association to the Address\r\n yield call(updateLocalModel, BURN_PERMIT_LOCATION_MODEL_NAME, burnPermLoc.BurnPermitLocationId, burnPermLoc)\r\n}\r\n\r\n/**\r\n * Create a Burn Address object\r\n * @param {number} BurnPermitLocationId - The Burn Permit ID\r\n * @param {Object} Address - The Address data to create\r\n */\r\nexport function* createBurnLocationAddress ({ BurnPermitLocationId, Address, }) {\r\n yield call(processBurnLocationAddress, { BurnPermitLocationId, Address, method: 'POST', })\r\n}\r\n\r\n/**\r\n * Delete a Burn Address object\r\n * @param {Object} addressId - The Burn Address ID\r\n */\r\nexport function* deleteBurnLocationAddress ({ BurnPermitLocationId, AddressId, }) {\r\n yield call(processBurnLocationAddress, { BurnPermitLocationId, Address: { AddressId, }, method: 'DELETE', })\r\n}\r\n\r\n/**\r\n * Update a Burn Address object\r\n * @param {Object} addressId - The Burn Address ID\r\n */\r\nexport function* updateBurnLocationAddress ({ Address, }) {\r\n yield put({\r\n type : ApiTypes.UPDATE_RECORD_REQUEST,\r\n url : `${REACT_APP_SERVER_URL}/${ADDRESS_ENDPOINT}/${Address.AddressId}`,\r\n body : Address,\r\n modelName : ADDRESS_MODEL_NAME,\r\n })\r\n}\r\n\r\nfunction* cancelRequest (pathMod, id) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : BurnPermitLocationTypes.UPDATE_BURN_PERMIT_LOCATION_LEGAL_DESC_REQUEST,\r\n url : `${BURN_PERMIT_LOCATION_ENDPOINT}/${pathMod}/${id}`,\r\n method : 'PUT',\r\n keyName : LOCATION_ID_NAME,\r\n keyValue : id,\r\n })\r\n}\r\n\r\nfunction* updateBurnPermitLocationLegalDesc ({ burnPermitLocation, }) {\r\n\r\n const { online, } = yield select(networkStateSelector)\r\n\r\n const burnPermit = yield select(getBurnPermit, { BurnPermitLocationId: burnPermitLocation.BurnPermitLocationId, })\r\n \r\n // check if model is related to a burn permit that is local\r\n // if it is not, check for and cancel any queued requests\r\n if (!burnPermit.IsLocal) {\r\n // if we're offline, cancel any queued req, then submit a new one\r\n if (!online) {\r\n yield call(cancelRequest, 'PutLegalLocationDescription', burnPermitLocation.BurnPermitLocationId)\r\n }\r\n yield put(BurnPermitLocationActions.updateBurnPermitLocationLegalDescRequest(burnPermitLocation, online))\r\n }\r\n\r\n if (!online) {\r\n const updatedLocationInfo = yield call(updateLocalModel, BURN_PERMIT_LOCATION_MODEL_NAME, burnPermitLocation.BurnPermitLocationId, burnPermitLocation)\r\n // update local search result so the My Permits and Search results show the pending updates\r\n const burnPermitId = yield select(getBurnPermitId, { BurnPermitLocationId: updatedLocationInfo.BurnPermitLocationId, })\r\n const searchUpdate = {\r\n LegalDescQ1 : updatedLocationInfo.LegalDescriptionQuarter1,\r\n LegalDescQ2 : updatedLocationInfo.LegalDescriptionQuarter2,\r\n LegalDescSection : updatedLocationInfo.LegalDescriptionSecion,\r\n LegalDescTownship : updatedLocationInfo.LegalDescriptionTownship,\r\n LegalDescRange : updatedLocationInfo.LegalDescriptionRange,\r\n LegalDescDirection : updatedLocationInfo.LegalDescriptionDirection.DirectionName,\r\n }\r\n yield call(updateLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, burnPermitId, searchUpdate)\r\n }\r\n}\r\n\r\nfunction* updateBurnPermitLocationLatLong ({ burnPermitLocation, }) {\r\n \r\n const { online, } = yield select(networkStateSelector)\r\n\r\n const burnPermit = yield select(getBurnPermit, { BurnPermitLocationId: burnPermitLocation.BurnPermitLocationId, })\r\n \r\n // check if model is related to a burn permit that is local\r\n // if it is not, check for and cancel any queued requests\r\n if (!burnPermit.IsLocal) {\r\n // if we're offline, cancel any queued req, then submit a new one\r\n if (!online) {\r\n yield call(cancelRequest, 'PutLatitudeLongitude', burnPermitLocation.BurnPermitLocationId)\r\n }\r\n yield put(BurnPermitLocationActions.updateBurnPermitLocationLatLongRequest(burnPermitLocation, online))\r\n }\r\n\r\n if (!online) {\r\n const updatedLocationInfo = yield call(updateLocalModel, BURN_PERMIT_LOCATION_MODEL_NAME, burnPermitLocation.BurnPermitLocationId, burnPermitLocation)\r\n // update local search result so the My Permits and Search results show the pending updates\r\n const burnPermitId = yield select(getBurnPermitId, { BurnPermitLocationId: updatedLocationInfo.BurnPermitLocationId, })\r\n const searchUpdate = {\r\n Latitude : updatedLocationInfo.Latitude,\r\n Longitude : updatedLocationInfo.Longitude,\r\n }\r\n yield call(updateLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, burnPermitId, searchUpdate)\r\n }\r\n}\r\n\r\nfunction* updateBurnPermitLocationAdditionalInfo ({ burnPermitLocation, }) {\r\n \r\n const { online, } = yield select(networkStateSelector)\r\n\r\n const burnPermit = yield select(getBurnPermit, { BurnPermitLocationId: burnPermitLocation.BurnPermitLocationId, })\r\n \r\n // check if model is related to a burn permit that is local\r\n // if it is not, check for and cancel any queued requests\r\n if (!burnPermit.IsLocal) {\r\n // if we're offline, cancel any queued req, then submit a new one\r\n if (!online) {\r\n yield call(cancelRequest, 'PutAdditionalLocationInfo', burnPermitLocation.BurnPermitLocationId)\r\n }\r\n yield put(BurnPermitLocationActions.updateBurnPermitLocationAdditionalInfoRequest(burnPermitLocation, online))\r\n }\r\n\r\n if (!online) {\r\n const model = { ...burnPermitLocation, Submit: true, }\r\n const updatedLocationInfo = yield call(updateLocalModel, BURN_PERMIT_LOCATION_MODEL_NAME, burnPermitLocation.BurnPermitLocationId, model)\r\n // update local search result so the My Permits and Search results show the pending updates\r\n const burnPermitId = yield select(getBurnPermitId, { BurnPermitLocationId: updatedLocationInfo.BurnPermitLocationId, })\r\n const searchUpdate = {\r\n County : updatedLocationInfo.County.CountyName,\r\n Region : updatedLocationInfo.Region.RegionName,\r\n }\r\n yield call(updateLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, burnPermitId, searchUpdate)\r\n }\r\n}\r\n\r\nexport function* submitOfflineLocationEdits (localId, serverId) {\r\n try {\r\n // Get the local location model\r\n const burnPermitLocation = yield select(modelByIdSelector, { modelName: BurnPermitLocation.modelName, modelId: localId, })\r\n if (burnPermitLocation.Submit) {\r\n // Get the ref data\r\n const permitLocationRef = { ...burnPermitLocation._fields, }\r\n // Set the server id\r\n permitLocationRef.BurnPermitLocationId = serverId\r\n \r\n // PLSS and Additional Info are always required\r\n const legalDescUrl = `${BURN_PERMIT_LOCATION_ENDPOINT}/PutLegalLocationDescription/${serverId}`\r\n const locInfoUrl = `${BURN_PERMIT_LOCATION_ENDPOINT}/PutAdditionalLocationInfo/${serverId}`\r\n const locReqs = [\r\n call(updateLocInfo, legalDescUrl, permitLocationRef),\r\n call(updateLocInfo, locInfoUrl, permitLocationRef),\r\n ]\r\n\r\n // Only submit the lat long req if lat longs are set\r\n if (permitLocationRef.Latitude && permitLocationRef.Longitude) {\r\n const latLongUrl = `${BURN_PERMIT_LOCATION_ENDPOINT}/PutLatitudeLongitude/${serverId}`\r\n locReqs.push(call(updateLocInfo, latLongUrl, permitLocationRef))\r\n }\r\n\r\n // Only submit the address req if an address is set\r\n const locationAddress = yield select(modelByIdSelector, { modelName: 'Address', modelId: burnPermitLocation.AddressId, })\r\n if (locationAddress) {\r\n const addr = { ...locationAddress._fields, }\r\n delete addr.AddressId\r\n const locAddrUrl = `${BURN_PERMIT_LOCATION_ENDPOINT}/${serverId}/Address`\r\n locReqs.push(call(updateLocInfo, locAddrUrl, addr, 'POST'))\r\n }\r\n yield all(locReqs)\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* updateLocInfo (url, body, method = 'PUT') {\r\n const resp = yield call(doFetch, url, { method, body, })\r\n if (resp.ok) {\r\n yield fork(apiSuccess, { payload: resp.responseBody, modelName: BURN_PERMIT_LOCATION_MODEL_NAME, })\r\n }\r\n else {\r\n yield call(showError, resp.responseBody)\r\n }\r\n}\r\n\r\n\r\nexport const BurnPermitLocationSagas = [\r\n takeLatest(BurnPermitLocationTypes.GET_BURN_LOCATION_INFO, getBurnLocationInfo),\r\n takeLatest(BurnPermitLocationTypes.CREATE_BURN_LOCATION_ADDRESS, createBurnLocationAddress),\r\n takeLatest(BurnPermitLocationTypes.DELETE_BURN_LOCATION_ADDRESS, deleteBurnLocationAddress),\r\n takeLatest(BurnPermitLocationTypes.LOCATION_ADDRESS_REQUEST_SUCCESS, locationAddressSuccess),\r\n takeEvery(BurnPermitLocationTypes.UPDATE_BURN_PERMIT_LOCATION_LEGAL_DESC, updateBurnPermitLocationLegalDesc),\r\n takeEvery(BurnPermitLocationTypes.UPDATE_BURN_PERMIT_LOCATION_LAT_LONG, updateBurnPermitLocationLatLong),\r\n takeEvery(BurnPermitLocationTypes.UPDATE_BURN_PERMIT_LOCATION_ADDITIONAL_INFO, updateBurnPermitLocationAdditionalInfo),\r\n takeLatest(BurnPermitLocationTypes.GET_LOCATION_LOOKUP_DATA, getBurnLocationLookupData),\r\n]","import { createSelector, } from 'reselect'\r\nimport { ormByIdSelector, } from './selectors'\r\n\r\n\r\nconst signatureState = state => state.BurnPermitSignature\r\n\r\nexport const permitSignatureState = createSelector(\r\n signatureState,\r\n signatureState => signatureState\r\n)\r\n\r\nexport const signatureByPermitId = ormByIdSelector(\r\n ({ BurnPermitDocument, BurnPermitSignature, }, PermitId) => {\r\n if (isNaN(PermitId)) {\r\n return {}\r\n }\r\n\r\n const permitApplicationSignature = BurnPermitSignature\r\n .filter({ BurnPermitId: PermitId, })\r\n .first()\r\n if (!permitApplicationSignature) {\r\n return {}\r\n }\r\n // Only return the signature if there is at least app signature info\r\n let appIsSigned = !!permitApplicationSignature.ApplicationEnvelopeId\r\n if (!appIsSigned) {\r\n // Or check if it was signed by DNR and there is a mailed application uploaded\r\n appIsSigned = BurnPermitDocument\r\n .filter({ BurnPermitId: PermitId, })\r\n .toModelArray()\r\n .some(doc => doc.BurnPermitDocumentType && doc.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Mailed Application')\r\n }\r\n if (!appIsSigned && !permitApplicationSignature.PermitEnvelopeId) {\r\n return {}\r\n }\r\n\r\n return permitApplicationSignature || {}\r\n }\r\n)\r\n\r\nexport const permitBeingReissued = createSelector(\r\n signatureState,\r\n signature => signature && signature.isReissuingPermit\r\n)\r\n\r\nexport const isLoadingDocuSignUrl = createSelector(\r\n signatureState,\r\n signature => signature && signature.isLoadingDocuSignUrl || false\r\n)\r\n\r\nexport const signatureCallbackState = createSelector(\r\n signatureState,\r\n signature => {\r\n const {\r\n burnPermitId,\r\n applicationSignatureEnvelopeId,\r\n permitSignatureEnvelopeId,\r\n applicationSignatureConfirmed,\r\n permitSignatureConfirmed,\r\n confirmingSignature,\r\n confirmationFailed,\r\n signatureError,\r\n } = signature\r\n return {\r\n BurnPermitId : burnPermitId,\r\n ApplicationEnvelopeId : applicationSignatureEnvelopeId,\r\n PermitEnvelopeId : permitSignatureEnvelopeId,\r\n applicationSignatureConfirmed,\r\n permitSignatureConfirmed,\r\n confirmingSignature,\r\n confirmationFailed,\r\n signatureError,\r\n }\r\n }\r\n)\r\n","import { createAuthSelector, } from './permissionSelectors'\n\n//#region signature section permission selectors\n\n/** User must sign a Burn Permit Application with DocuSign to submit it */\nexport const userMustSignPermitToSubmit = createAuthSelector(\n ({ isSAWUser, isGovAgent, paysByVoucher, isVerifiedAgent, isStateGovCust, }) => {\n let mustSign = isSAWUser || isStateGovCust\n if (isGovAgent && isVerifiedAgent) {\n mustSign = !paysByVoucher\n }\n return mustSign\n }\n)\n\n/** User must upload a scanned copy of the Burn Permit Application to submit it */\nexport const userMustUploadPermitToSubmit = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n/**\n * User does not need to sign or upload a copy of a Burn Permit Applicaton\n * if they are a verified Gov't Agent for an Agency that Pays By Voucher\n */\nexport const userCanAutoSubmitPermit = createAuthSelector(\n ({ isGovAgent, paysByVoucher, isVerifiedAgent, isSAWUser, }) => {\n let canAutoSubmit = false\n if (isSAWUser && isGovAgent && isVerifiedAgent) {\n canAutoSubmit = paysByVoucher\n }\n return canAutoSubmit\n }\n)\n\n//#endregion\n\n//#region burn permit form permission selectors\n\n/**\n * User must pay for an Order before a Permit application is submitted\n * if they are:\n * - a regular SAW user (Private, Agent)\n * - an unverified Gov't Agent\n * - a verified Gov't Agent of an Agency not configured to pay by voucher\n * - a State Gov't Customer\n */\nexport const userMustPayOrdertoSubmitPermit = createAuthSelector(\n ({ isGovAgent, paysByVoucher, isVerifiedAgent, isSAWUser, isStateGovCust, }) => {\n let mustPay = isSAWUser || isStateGovCust\n if (isGovAgent && isVerifiedAgent) {\n mustPay = !paysByVoucher\n }\n return mustPay\n }\n)\n\n/** \n * User must sign an Issued permit before using it to submit Burn Requests \n * if they are:\n * - a regular SAW user (Private, Agent)\n * - an unverified Gov't Agent\n * - a verified Gov't Agent of an Agency not configured to pay by voucher\n * - a State Gov't Customer\n */\nexport const userMustSignIssuedPermit = createAuthSelector(\n ({ isGovAgent, paysByVoucher, isVerifiedAgent, isSAWUser, isStateGovCust, }) => {\n let mustSign = isSAWUser || isStateGovCust\n if (isGovAgent && isVerifiedAgent) {\n mustSign = !paysByVoucher\n }\n return mustSign\n }\n)\n\n/** User can pay for an Order with a voucher */\nexport const userCanPayWithVoucher = createAuthSelector(\n ({ isStateGovCust, isGovAgent, paysByVoucher, isVerifiedAgent, isDnr, }) => {\n let payWithVoucher = isDnr || isStateGovCust\n if (isGovAgent && isVerifiedAgent) {\n payWithVoucher = paysByVoucher\n }\n return payWithVoucher\n }\n)\n\n//#endregion\n\n//#region signature callback permission selectors\n\n/** User is a Permit Approver when Signing */\nexport const userMakesApproverSignatures = createAuthSelector(\n ({ isDnr , }) => isDnr \n)\n\n//#endregion\n\n//#region burn permit order permission selectors\n\n/** User can edit Orders (record cash/check) */\nexport const userCanEditOrders = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n/** User can refund Orders */\nexport const userCanRefundOrders = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n//#endregion\n\n//#region burn permit status permission selectors\n\n/** User can see internal only Burn Permit statuses */\nexport const userCanSeeInternalOnly = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n/** User can edit a Burn Permit's status */\nexport const userCanEditPermitStatus = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n/** User can edit a Burn Permit's conditions */\nexport const userCanEditPermitConditions = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n/** User sets Issued/Expiration dates when signing a Permit */\nexport const userSetsPermitDatesWhenSigning = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n//#endregion\n\n//#region applicant info section permission selectors\n\n/** User can select a Landowner for the Burner fields */\nexport const userCanSelectPermitLandowner = createAuthSelector(\n ({ isDnr, isAgent, isGovAgent, isVerifiedAgent, isSAWUser, }) => \n isDnr || (isSAWUser && (isAgent || isGovAgent) && isVerifiedAgent)\n)\n\nexport const userCanSelectGovCustForPermit = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n/** User can update legacy Burner/Agent information */\nexport const userCanEditLegacyPermitApplInfo = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n/** User is the default Burner on a new Burn Permit Application */\nexport const userIsDefaultLandowner = createAuthSelector(\n ({ isSAWUser, isPrivate, isStateGovCust, }) =>\n (isSAWUser && isPrivate) || isStateGovCust\n)\n\n//#endregion\n\n//#region burn permit location section permission selectors\n\n/** User can edit a Permit Application's UGA status */\nexport const userCanEditUGA = createAuthSelector(\n ({ isDnr, }) => isDnr \n)\n\nexport const userCanEditLocationPastSubmission = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\n//#endregion\n\n//#region burn permit location section permission selectors\nexport const userCanRecordCashCheckPayment = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n//#endregion\n\n//#region burn permit list permission selectors\nexport const userCanBeAssignedPermits = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n//#endregion\n\nexport const userCreatesGovAgentPermits = createAuthSelector(\n ({ isSAWUser, isGovAgent, isVerifiedAgent, }) => \n isSAWUser && isGovAgent && isVerifiedAgent\n)\n\nexport const userCanReviewFHExemption = createAuthSelector(\n ({ isDnr, }) => isDnr\n)\n\nexport const userSeesStatusModals = createAuthSelector(\n ({ isDnr, isGovAgent, isVerifiedAgent, }) => !isDnr || (isGovAgent && isVerifiedAgent)\n)\n","// Libraries\nimport { all, put, select, call, takeLatest, } from 'redux-saga/effects'\nimport { isEqual, } from 'lodash'\n\n// Sagas\nimport { doFetch, showError, } from './ApiSagas'\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { getBurnPermitStatusHistory, getPermitFiles, updateNextSteps, } from './BurnPermitSagas'\nimport { destroyLocalModels, serverHasNewerData, upsertLocalModel, } from './OrmSagas'\n\n// Reducers\nimport { ApiTypes, } from '../redux/ApiRedux'\nimport { AppTypes, } from '../redux/AppRedux'\nimport { OrmTypes, } from '../redux/OrmRedux'\nimport { UiTypes, } from '../redux/UiRedux'\nimport { BurnPermitSignatureTypes, } from '../redux/BurnPermitSignatureRedux'\nimport { BurnPermitInstructionsTypes, } from '../redux/BurnPermitInstructionsRedux'\n\n// Selectors\nimport {\n signatureByPermitId,\n permitBeingReissued,\n} from '../selectors/burnPermitSignatureSelectors'\nimport { userSetsPermitDatesWhenSigning, } from '../selectors/burnPermitPermissionSelectors'\nimport { userIsDNR, } from '../selectors/userSelectors'\n\n// Models\nimport BurnPermitSignature from '../models/BurnPermitSignature'\nimport BurnPermit from '../models/BurnPermit'\n\n\n// Constants\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\nconst BURN_PERMIT_SIGNATURE_ENDPOINT = BurnPermitSignature.endpoint()\n\n\nfunction* setLoadingDocuSignUrl (loading = false) {\n yield put({ type: BurnPermitSignatureTypes.LOADING_DOCU_SIGN_URL, loading, })\n}\n\n\nexport function* getBurnPermitSignatures ({ burnPermitId, verify = true, disableLoading = false, }) {\n try {\n if (!disableLoading) {\n yield call(showLoading)\n }\n yield put({ type: BurnPermitSignatureTypes.GETTING_SIGNATURES, getting: true, })\n burnPermitId = parseInt(burnPermitId)\n if (isNaN(burnPermitId)) {\n yield put({ type: ApiTypes.FAILURE, error: 'You must supply a Burn Permit ID to get the Application and Permit Signatures.', })\n return\n }\n\n const permitAppSignaturesUrl = `${REACT_APP_SERVER_URL}${BURN_PERMIT_SIGNATURE_ENDPOINT}/${burnPermitId}/`\n\n const permitAppSignaturesResp = yield call(doFetch, permitAppSignaturesUrl)\n\n if (permitAppSignaturesResp.ok !== true) {\n yield put({ type: ApiTypes.FAILURE, error: 'An error occurred attempting to retrieve the Burn Permit Application Signatures.', })\n return\n }\n\n const { responseBody, } = permitAppSignaturesResp\n\n const localSignature = yield select(signatureByPermitId, burnPermitId)\n if (!responseBody) {\n if (localSignature) {\n yield put({\n type : OrmTypes.DESTROY,\n modelName : BurnPermitSignature.modelName,\n modelId : localSignature.BurnPermitSignatureId,\n })\n }\n else {\n yield call(destroyLocalModels, BurnPermitSignature.modelName, { BurnPermitId: burnPermitId, })\n }\n }\n else {\n const permitSignature = permitAppSignaturesResp.responseBody\n const hasNewData = yield call(serverHasNewerData, BurnPermitSignature.modelName, { BurnPermitId: burnPermitId, }, permitSignature)\n // The ExpiringSoon and IsExpired props are calculated upon request and do not modify the Create/UpdateDate props\n // So we also want to check to see if the signature is becoming or already expired by comparing the object equality\n if (hasNewData || !isEqual(localSignature, permitSignature)) {\n yield call(destroyLocalModels, BurnPermitSignature.modelName, { BurnPermitId: burnPermitId, })\n yield call(upsertLocalModel, BurnPermitSignature.modelName, permitSignature)\n }\n if (verify === true) {\n const { BurnPermitSignatureId, } = permitSignature\n yield call(verifyPermitSignature, { BurnPermitSignatureId, burnPermitId, })\n }\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield put({ type: BurnPermitSignatureTypes.GETTING_SIGNATURES, getting: false, })\n if (!disableLoading) {\n yield call(hideLoading)\n }\n }\n}\n\nexport function* downloadBurnPermitSignatures (person) {\n try {\n\n let downloadSignaturesUrl = `${REACT_APP_SERVER_URL}${BURN_PERMIT_SIGNATURE_ENDPOINT}/Download`\n\n if (person && person.personId > 0) {\n const currUserIsDnr = yield select(userIsDNR)\n if (currUserIsDnr) {\n downloadSignaturesUrl += `?personId=${person.personId}`\n }\n }\n\n const downloadResp = yield call(doFetch, downloadSignaturesUrl)\n \n if (downloadResp.ok !== true) {\n yield put({ type: ApiTypes.FAILURE, error: 'An error occurred attempting to download Burn Permit Application Signatures.', })\n return\n }\n\n const { responseBody, } = downloadResp\n \n yield put({\n type : OrmTypes.UPSERT_RANGE,\n modelName : 'BurnPermitSignature',\n records : responseBody,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\nexport function* signPermitApplication ({ burnPermitId, force, }) {\n try {\n const valid = yield call(signatureRequestPreflight, burnPermitId, 'sign', 'Permit Application')\n if (valid !== true) {\n return\n }\n\n let permitApplicationSignatureUrl = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/SignApplication`\n if (force) {\n permitApplicationSignatureUrl += `?forceSignature=${force}`\n }\n\n const permitApplicationSignatureResp = yield call(doFetch, permitApplicationSignatureUrl)\n\n const { error, } = permitApplicationSignatureResp.responseBody\n const enableForce = error && error.includes('forceSignature')\n if (enableForce) {\n const abandonedPermitApplicationId = error.match(/\\d+/, 'g').pop()\n const errorMsg = `${error.split('?').shift()}?`\n yield put({\n type : BurnPermitSignatureTypes.SIGNATURE_FAILED,\n error : errorMsg,\n enableForce,\n abandonedPermitApplicationId,\n })\n yield put({ type: UiTypes.OPEN_MODAL, modalKey: 'FORCE_PERMIT_APPLICATION_SIGNATURE', })\n return\n }\n\n yield call(handleSignatureResponse, permitApplicationSignatureResp, 'Please validate the data in each section of the Permit Application.')\n }\n catch (error) {\n yield call(showError, error)\n yield call(setLoadingDocuSignUrl)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* confirmApplicationSignature ({ burnPermitId, envelopeId, }) {\n try {\n const valid = yield call(confirmSignaturePreflight, burnPermitId, envelopeId, 'Permit Application')\n if (valid !== true) {\n return\n }\n\n const permitApplicationSignatureUrl = `${REACT_APP_SERVER_URL}${BURN_PERMIT_SIGNATURE_ENDPOINT}/ApplicationSignature`\n\n const requestObj = {\n method : 'POST',\n body : {\n BurnPermitId : burnPermitId,\n ApplicationEnvelopeId : envelopeId,\n },\n }\n\n const applicationSignatureResp = yield call(doFetch, permitApplicationSignatureUrl, requestObj)\n \n if (applicationSignatureResp.ok !== true || !(applicationSignatureResp.responseBody.BurnPermitDocumentId > 0)) {\n yield put({ type: ApiTypes.FAILURE, error: 'An error occurred attempting to confirm the Burn Permit Application Signature. Please contact support.', })\n return\n }\n\n yield put({ type: BurnPermitSignatureTypes.APPLICATION_SIGNATURE_CONFIRMED, burnPermitId, })\n\n // Make sure the instructions start on the Sign step when the user comes back from DocuSign\n yield put({\n type : BurnPermitInstructionsTypes.COMPLETED_INSTRUCTION_STEPS,\n steps : [ 'Apply', 'Sign', ],\n burnPermitId,\n })\n\n // now that we know it's confirmed, get the signature\n // and update the status history in case it was a voucher agency signing\n yield all([\n call(getBurnPermitSignatures, { burnPermitId, }),\n call(getBurnPermitStatusHistory, { burnPermitId, }),\n ])\n\n // Updates the next steps modal and instructions to complete the expected\n // steps and move to the next one depending on the workflow for the application\n // or permit\n yield call(updateNextSteps, burnPermitId)\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* previewPermit ({ burnPermitId, }) {\n try {\n const valid = yield call(signatureRequestPreflight, burnPermitId, 'preview', 'Permit')\n if (valid !== true) {\n return\n }\n\n const permitSignatureUrl = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/PreviewPermit`\n const permitPreviewResp = yield call(doFetch, permitSignatureUrl)\n\n // Get the signatures again since the API clears out the PermitEnvelopeId of the\n // signature record when someone is previewing the permit.\n // This is necessary so the web client does not try to confirm the permit signature\n // when the user comes back to the burn portal from previewing the permit int DocuSign\n yield call(getBurnPermitSignatures, { burnPermitId, verify: false, })\n\n yield call(handleSignatureResponse, permitPreviewResp)\n }\n catch (error) {\n yield call(setLoadingDocuSignUrl)\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* signPermit ({ burnPermitId, validDate, expirationDate, }) {\n try {\n const valid = yield call(signatureRequestPreflight, burnPermitId, 'sign', 'Permit')\n if (valid !== true) {\n return\n }\n\n const setDates = yield select(userSetsPermitDatesWhenSigning)\n\n if (setDates && !validDate) {\n yield put({ type: ApiTypes.FAILURE, error: 'You must supply a Valid Date to sign the Permit.', })\n return\n }\n\n if (setDates && !expirationDate) {\n yield put({ type: ApiTypes.FAILURE, error: 'You must supply an Expiration Date to sign the Permit.', })\n return\n }\n\n const permitSignatureUrl = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/SignPermit`\n const body = {\n method : 'POST',\n body : {\n BurnPermitId : burnPermitId,\n BurnPermitValidDate : validDate,\n BurnPermitExpirationDate : expirationDate,\n },\n }\n const permitSignatureResp = yield call(doFetch, permitSignatureUrl, body)\n\n yield call(handleSignatureResponse, permitSignatureResp)\n }\n catch (error) {\n yield call(showError, error)\n yield call(setLoadingDocuSignUrl)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* reIssuePermit ({ burnPermitId, }) {\n try {\n const valid = yield call(signatureRequestPreflight, burnPermitId, 're-issue', 'Permit')\n if (valid !== true) {\n return\n }\n\n const permitSignatureUrl = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/ReIssuePermit`\n const body = {\n method : 'POST',\n body : {\n BurnPermitId: burnPermitId,\n },\n }\n const permitSignatureResp = yield call(doFetch, permitSignatureUrl, body)\n\n yield call(handleSignatureResponse, permitSignatureResp)\n }\n catch (error) {\n yield call(showError, error)\n yield call(setLoadingDocuSignUrl)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* confirmPermitSignature ({ burnPermitId, envelopeId, }) {\n try {\n const valid = yield call(confirmSignaturePreflight, burnPermitId, envelopeId, 'Permit')\n if (valid !== true) {\n return\n }\n\n let permitSignatureUrl = `${REACT_APP_SERVER_URL}${BURN_PERMIT_SIGNATURE_ENDPOINT}/${burnPermitId}/PermitSignature`\n\n const isReissuing = yield select(permitBeingReissued)\n if (isReissuing) {\n permitSignatureUrl += '?isReissuing=true'\n }\n\n const requestObj = {\n method : 'PUT',\n body : {\n BurnPermitId : burnPermitId,\n PermitEnvelopeId : envelopeId,\n },\n }\n\n const permitSignatureResp = yield call(doFetch, permitSignatureUrl, requestObj)\n\n let docIdIsMissing = false\n const userIsDnr = yield select(userIsDNR)\n if (!userIsDnr) {\n docIdIsMissing = !(permitSignatureResp.responseBody.BurnPermitDocumentId > 0)\n }\n if (permitSignatureResp.ok !== true || docIdIsMissing) {\n yield put({ type: ApiTypes.FAILURE, error: permitSignatureResp.responseBody.error || 'An error occurred attempting to confirm the Burn Permit Signature. Please contact support.', })\n return\n }\n\n yield put({ type: BurnPermitSignatureTypes.PERMIT_SIGNATURE_CONFIRMED, burnPermitId, })\n yield put({ type: BurnPermitInstructionsTypes.COMPLETED_INSTRUCTION_STEPS, burnPermitId, steps: [ 'Approved', 'Issued', ], })\n // now that we know it's confirmed, get the signature\n yield call(getBurnPermitSignatures, { burnPermitId, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* signatureRequestPreflight (burnPermitId, signatureType, docType) {\n yield call(showLoading)\n\n yield put({ type: BurnPermitSignatureTypes.RESET_SIGNATURE_STATE, })\n yield call(setLoadingDocuSignUrl, true)\n\n if (!burnPermitId) {\n yield put({ type: ApiTypes.FAILURE, error: `You must supply a Burn Permit ID to ${signatureType} the ${docType}.`, })\n return false\n }\n return true\n}\n\nexport function* confirmSignaturePreflight (burnPermitId, envelopeId, docType) {\n yield call(showLoading)\n\n if (isNaN(parseInt(burnPermitId))) {\n yield put({ type: ApiTypes.FAILURE, error: `You must supply a Burn Permit ID to confirm signing the ${docType}.`, })\n return false\n }\n\n if (!envelopeId) {\n yield put({ type: ApiTypes.FAILURE, error: `You must supply a Envelope ID to confirm signing the ${docType}.`, })\n return false\n }\n\n return true\n}\n\nexport function* handleSignatureResponse (response, errorMsg) {\n if (response.ok !== true) {\n let error = response.responseBody.error || 'An error occurred attempting to retrieve the Burn Permit Signature URL. Please contact support.'\n if (errorMsg) {\n error += `\\n\\n${errorMsg}`\n }\n yield call(showError, error)\n yield call(setLoadingDocuSignUrl)\n return\n }\n\n const { DocuSignUrl, } = response.responseBody\n if (!DocuSignUrl) {\n let error = 'There is an issue with the Burn Permit Signature response. Please contact support.'\n if (errorMsg) {\n error += `\\n\\n${errorMsg}`\n }\n yield call(showError, error)\n yield call(setLoadingDocuSignUrl)\n return\n }\n\n window.location.href = DocuSignUrl\n}\n\nexport function* submitSignatureEvent ({ event, }) {\n try {\n const url = `${REACT_APP_SERVER_URL}${BURN_PERMIT_SIGNATURE_ENDPOINT}/ToConfirm?signatureEvent=${event}`\n const permitSignatureResp = yield call(doFetch, url)\n const { error, BurnPermitSignature, } = permitSignatureResp.responseBody\n if (error) {\n let abandonedPermitApplicationId = ''\n let errorMsg = error\n const enableForce = error.includes('forceSignature')\n if (enableForce) {\n abandonedPermitApplicationId = error.match(/\\d+/, 'g').pop()\n errorMsg = `${errorMsg.split('?').shift()}?`\n }\n yield put({\n type : BurnPermitSignatureTypes.SIGNATURE_FAILED,\n error : errorMsg,\n enableForce,\n abandonedPermitApplicationId,\n })\n return\n }\n else if (!BurnPermitSignature) {\n const message = 'No Burn Permit Signature found to confirm.'\n yield put({ type: BurnPermitSignatureTypes.SIGNATURE_FAILED, error: message, })\n return\n }\n\n const {\n BurnPermitId,\n ApplicationEnvelopeId,\n ApplicationSignedBy,\n PermitEnvelopeId,\n PermitApproverSignedBy,\n PermitApplicantSignedBy,\n } = BurnPermitSignature\n\n if (event === 'signing_complete') {\n if (ApplicationEnvelopeId && !ApplicationSignedBy) {\n yield call(confirmApplicationSignature, { burnPermitId: BurnPermitId, envelopeId: ApplicationEnvelopeId, })\n }\n else if (PermitEnvelopeId && (!PermitApproverSignedBy || !PermitApplicantSignedBy)) {\n yield call(confirmPermitSignature, { burnPermitId: BurnPermitId, envelopeId: PermitEnvelopeId, })\n }\n // This is likely the case when a dnr user is previewing a permit\n else {\n yield put({ type: BurnPermitSignatureTypes.SIGNATURE_COMPLETE, burnPermitId: BurnPermitId, })\n yield put({ type: AppTypes.REDIRECT_TO, route: `/permits/${BurnPermitId}`, })\n }\n }\n else if (event === 'viewing_complete') {\n yield put({ type: AppTypes.REDIRECT_TO, route: `/permits/${BurnPermitId}`, })\n }\n else {\n yield put({ type: BurnPermitSignatureTypes.SIGNATURE_COMPLETE, burnPermitId: BurnPermitId, })\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\nfunction* verifyPermitSignature ({ BurnPermitSignatureId, burnPermitId, }) {\n try {\n yield call(showLoading)\n yield put({ type: BurnPermitSignatureTypes.VERIFYING_SIGNATURES, verifying: true, })\n const permitSignatureUrl = `${REACT_APP_SERVER_URL}${BURN_PERMIT_SIGNATURE_ENDPOINT}/${BurnPermitSignatureId}/VerifySignatures`\n const permitSignatureResp = yield call(doFetch, permitSignatureUrl)\n\n if (permitSignatureResp.ok) {\n const { shouldUpdateSignature, shouldUpdateDocs, } = permitSignatureResp.responseBody\n if (shouldUpdateDocs) {\n yield call(getPermitFiles, { permitId: burnPermitId, })\n }\n if (shouldUpdateSignature) {\n // Make sure we don't recurse\n yield call(getBurnPermitSignatures, { burnPermitId, verify: false, })\n }\n }\n }\n catch (error) {\n yield call(showError, error.message)\n }\n finally {\n // Always clear this in case something unexpected happens \n // Or the user navigates back from DocuSign using the browser controls\n yield call(setLoadingDocuSignUrl)\n yield put({ type: BurnPermitSignatureTypes.VERIFYING_SIGNATURES, verifying: false, })\n }\n}\n\n\nexport const BurnPermitSignatureSagas = [\n takeLatest(BurnPermitSignatureTypes.GET_BURN_PERMIT_SIGNATURES, getBurnPermitSignatures),\n takeLatest(BurnPermitSignatureTypes.RE_ISSUE_PERMIT, reIssuePermit),\n takeLatest(BurnPermitSignatureTypes.PREVIEW_PERMIT, previewPermit),\n takeLatest(BurnPermitSignatureTypes.SIGN_PERMIT, signPermit),\n takeLatest(BurnPermitSignatureTypes.SIGN_PERMIT_APPLICATION, signPermitApplication),\n takeLatest(BurnPermitSignatureTypes.CONFIRM_APPLICATION_SIGNATURE, confirmApplicationSignature),\n takeLatest(BurnPermitSignatureTypes.CONFIRM_PERMIT_SIGNATURE, confirmPermitSignature),\n takeLatest(BurnPermitSignatureTypes.DOCU_SIGN_SIGNATURE_EVENT, submitSignatureEvent),\n]\n","import { createActions, } from 'reduxsauce'\n\nimport BurnPermitFuel from '../models/BurnPermitFuel'\n\nconst BURN_PERMIT_FUEL_MODEL_NAME = BurnPermitFuel.modelName\nconst BURN_PERMIT_FUEL_ENDPOINT = BurnPermitFuel.endpoint()\n\n\nconst { Types, Creators, } = createActions({\n getBurnPermitFuelsInfo : [ 'burnPermitFuelId', ],\n updateBurnPermitFuels : [ 'burnPermitFuel', ],\n updateBurnPermitFuelsRequest : (burnPermitFuel, showSuccess, calcFee) => ({\n type : 'UPDATE_BURN_PERMIT_FUEL_REQUEST',\n meta : {\n offline: {\n effect: {\n url : `${BURN_PERMIT_FUEL_ENDPOINT}/${burnPermitFuel.BurnPermitFuelId}`,\n init : { method: 'PUT', body: { ...burnPermitFuel, }, },\n },\n commit: {\n type : 'FUELS_REQUEST_SUCCESS',\n modelName : BURN_PERMIT_FUEL_MODEL_NAME,\n showSuccess,\n calcFee,\n },\n rollback: { type: 'API_FAIL', },\n },\n },\n }),\n fuelsRequestSuccess: [ 'payload', ],\n})\n\nexport const BurnPermitFuelsTypes = Types\nexport default Creators","// Libraries\r\nimport { put, select, call, fork, takeLatest, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { getLookupData, doFetch, showError, extractPayload, } from './ApiSagas'\r\nimport { upsertLocalModel, upsertLocalModels, replaceAll, } from './OrmSagas'\r\nimport { getBurnPermit, } from './BurnPermitSagas'\r\n\r\n// Reducers\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport BurnPermitFuelsActions, { BurnPermitFuelsTypes, } from '../redux/BurnPermitFuelsRedux'\r\nimport { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\r\n\r\n// Models\r\nimport BurnPermitFuel from '../models/BurnPermitFuel'\r\n\r\n// Selectors\r\nimport { networkStateSelector, getBurnPermitId, } from '../selectors/selectors'\r\nimport { modelByIdSelector, } from '../selectors/modelSelectors'\r\n\r\n// Constants\r\nconst BURN_PERMIT_FUEL_MODEL_NAME = BurnPermitFuel.modelName\r\nconst BURN_PERMIT_FUEL_ENDPOINT = BurnPermitFuel.endpoint()\r\n\r\nfunction* getFuelsLookupData () {\r\n // The getLookupData saga will update the ORM for us\r\n // so we don't need to worry about the response\r\n yield fork(getLookupData, { modelName: 'BurnIgnitionType', })\r\n yield fork(getLookupData, { modelName: 'DuffType', })\r\n yield fork(getLookupData, { modelName: 'FuelDiameter', })\r\n}\r\n\r\n/**\r\n * Get the Burn Permit Fuels information for the provided Burn Permit Fuel ID.\r\n * Will also request the lookup data to map the statuses to for the controls\r\n * @param {number} burnPermitId\r\n */\r\nexport function* getBurnPermitFuelsInfo ({ burnPermitFuelId, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online) {\r\n return\r\n }\r\n\r\n if (!burnPermitFuelId) {\r\n yield call(showError, 'You must provide a Burn Permit Fuel ID in order to retrieve Fuel Information.')\r\n return\r\n }\r\n\r\n yield fork(getFuelsLookupData)\r\n\r\n // Creates the Burn Permit Fuels Urls\r\n const permitFuelsUrl = `${BURN_PERMIT_FUEL_ENDPOINT}/${burnPermitFuelId}`\r\n \r\n const permitFuelsResp = yield call(doFetch, permitFuelsUrl)\r\n // If it's not an Ok, 200, or 404 response, throw an Error\r\n if (permitFuelsResp.ok === false) {\r\n yield call(showError, `An error occurred fetching the Burn Permit Fuels Information for ID: ${burnPermitFuelId}.`)\r\n return\r\n }\r\n\r\n permitFuelsResp.responseBody.IsLocal = false\r\n yield call(upsertFuelsData, permitFuelsResp.responseBody)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* upsertFuelsData (fuels) {\r\n if (Array.isArray(fuels.BurnPermitFuelLoadingXref)) {\r\n const xrefs = [ ...fuels.BurnPermitFuelLoadingXref, ]\r\n yield call(replaceAll, 'BurnPermitFuelLoadingXref', xrefs, { BurnPermitFuelId: fuels.BurnPermitFuelId, })\r\n delete fuels.BurnPermitFuelLoadingXref\r\n } else {\r\n yield call(replaceAll, 'BurnPermitFuelLoadingXref', [], { BurnPermitFuelId: fuels.BurnPermitFuelId, })\r\n }\r\n yield call(upsertLocalModel, BURN_PERMIT_FUEL_MODEL_NAME, fuels)\r\n}\r\n\r\nexport function* downloadBurnPermitFuelsInfo () {\r\n try {\r\n const permitFuelsResp = yield call(doFetch, `${BURN_PERMIT_FUEL_ENDPOINT}/Download`)\r\n // If it's not an Ok, 200, or 404 response, throw an Error\r\n if (permitFuelsResp.ok === false) {\r\n yield call(showError, 'An error occurred downloading Burn Permit Fuels Information')\r\n return\r\n }\r\n\r\n const {\r\n fuels,\r\n fuelLoadings,\r\n ignitionTypes,\r\n } = permitFuelsResp.responseBody\r\n\r\n for (let i = 0, len = fuels.length; i < len; i++) {\r\n const f = fuels[i]\r\n const { BurnPermitFuelId, } = f\r\n f.IsLocal = false\r\n f.BurnIgnitionTypes = ignitionTypes.filter(x => x.BurnPermitFuelId === BurnPermitFuelId).map(x => x.BurnIgnitionTypeId)\r\n }\r\n yield call(replaceAll, 'BurnPermitFuelLoadingXref', fuelLoadings)\r\n yield call(upsertLocalModels, BURN_PERMIT_FUEL_MODEL_NAME, fuels)\r\n \r\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'FuelsInfo', status: true, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nexport function* updateBurnPermitFuels ({ burnPermitFuel, }) {\r\n const { online, } = yield select(networkStateSelector)\r\n const { BurnPermitFuelId, } = burnPermitFuel\r\n const localBurnPermitFuel = yield select(modelByIdSelector, { modelName: BURN_PERMIT_FUEL_MODEL_NAME, modelId: BurnPermitFuelId, })\r\n if (!localBurnPermitFuel.IsLocal) {\r\n if (!online) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : BurnPermitFuelsTypes.UPDATE_BURN_PERMIT_FUELS_REQUEST,\r\n url : `${BURN_PERMIT_FUEL_ENDPOINT}/${BurnPermitFuelId}`,\r\n method : 'PUT',\r\n keyName : BurnPermitFuel.options.idAttribute,\r\n keyValue : BurnPermitFuelId,\r\n })\r\n }\r\n const calcFee = true\r\n yield put(BurnPermitFuelsActions.updateBurnPermitFuelsRequest(burnPermitFuel, online, calcFee))\r\n }\r\n \r\n if (!online) {\r\n const model = { ...burnPermitFuel, Submit: true, }\r\n yield call(upsertFuelsData, model)\r\n }\r\n}\r\n\r\nfunction* updateBurnPermitFuelsSuccess (resp) {\r\n try {\r\n const burnPermitFuel = yield call(extractPayload, resp)\r\n yield call(upsertFuelsData, burnPermitFuel)\r\n const { showSuccess, calcFee, } = resp\r\n if (showSuccess) {\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n if (calcFee) {\r\n // call get burn permit so to tonnage and fee update\r\n const burnPermitId = yield select(getBurnPermitId, { BurnPermitFuelId: burnPermitFuel.BurnPermitFuelId, })\r\n yield call(getBurnPermit, { burnPermitId, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nexport function* submitOfflineFuelsEdits (localId, serverId) {\r\n try {\r\n // Get the local fuel model\r\n const burnPermitFuel = yield select(modelByIdSelector, { modelName: BURN_PERMIT_FUEL_MODEL_NAME, modelId: localId, })\r\n if (burnPermitFuel.Submit) {\r\n // Get the ref data\r\n const permitFuelRef = { ...burnPermitFuel._fields, }\r\n permitFuelRef.BurnPermitFuelId = serverId\r\n permitFuelRef.BurnIgnitionTypes = burnPermitFuel.BurnIgnitionTypes.toRefArray().map(t => t.BurnIgnitionTypeId)\r\n permitFuelRef.BurnPermitFuelLoadingXref = burnPermitFuel.BurnPermitFuelLoadingXrefs.toRefArray()\r\n // Update it\r\n const url = `${BURN_PERMIT_FUEL_ENDPOINT}/${serverId}`\r\n const fuelResp = yield call(doFetch, url, { method: 'PUT', body: permitFuelRef, })\r\n if (fuelResp.ok) {\r\n yield fork(updateBurnPermitFuelsSuccess, { payload: fuelResp.responseBody, modelName: BURN_PERMIT_FUEL_MODEL_NAME, })\r\n return\r\n }\r\n yield call(showError, fuelResp.responseBody)\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nexport const BurnPermitFuelsSagas = [\r\n takeLatest(BurnPermitFuelsTypes.GET_BURN_PERMIT_FUELS_INFO, getBurnPermitFuelsInfo),\r\n takeLatest(BurnPermitFuelsTypes.UPDATE_BURN_PERMIT_FUELS, updateBurnPermitFuels),\r\n takeLatest(BurnPermitFuelsTypes.FUELS_REQUEST_SUCCESS, updateBurnPermitFuelsSuccess),\r\n]","import { ormSelector, ormByIdSelector, } from './selectors'\n\n\n\nexport const permitForestHealthData = ormByIdSelector(\n ({ BurnPermit, }, BurnPermitId) => {\n if (isNaN(BurnPermitId)) {\n return null\n }\n const permit = BurnPermit.withId(BurnPermitId)\n if (!permit || !permit.ForestHealthExemptId) {\n return null\n }\n\n let problemType\n if (permit.ForestHealthExempt && permit.ForestHealthExempt.ForestHealthProblemTypes && permit.ForestHealthExempt.ForestHealthProblemTypes.exists()) {\n problemType = permit.ForestHealthExempt.ForestHealthProblemTypes.first()\n }\n\n return {\n BurnPermitId : permit.BurnPermitId,\n ForestHealthExemptId : permit.ForestHealthExemptId,\n ProblemTypeId : problemType ? problemType.ForestHealthProblemTypeId : '',\n AlternativeToRxFire : permit.ForestHealthExempt ? permit.ForestHealthExempt.AlternativeToRxFire: '',\n ForestHealthExemptionApprovalFlag : permit.ForestHealthExempt ? permit.ForestHealthExempt.ForestHealthExemptionApprovalFlag: '',\n AlternativeNotAppropriateReason : permit.ForestHealthExempt && permit.ForestHealthExempt.ForestHealthExemptionApprovalFlag ? permit.ForestHealthExempt.AlternativeNotAppropriateReason: '',\n ForestHealthExemptionApprovalDate : permit.ForestHealthExempt && permit.ForestHealthExempt.ForestHealthExemptionApprovalFlag ? permit.ForestHealthExempt.ForestHealthExemptionApprovalDate || permit.ForestHealthExempt.CreateDate: '',\n ForestHealthExemptionApprovalBy : permit.ForestHealthExempt && permit.ForestHealthExempt.ForestHealthExemptionApprovalFlag ? permit.ForestHealthExempt.ForestHealthExemptionApprovalBy || permit.ForestHealthExempt.CreateBy: '',\n }\n }\n)\n\nexport const problemTypesSelector = ormSelector(\n ({ ForestHealthProblemType, }) => {\n if (!ForestHealthProblemType) {\n return []\n }\n return ForestHealthProblemType.all().toRefArray().map(t => {\n return { Value: t.ForestHealthProblemTypeId, Text: t.ForestHealthProblemTypeName, }\n })\n }\n)\n\n\nexport const permitNeedsForestHealthDoc = ormByIdSelector(\n ({ BurnPermit, BurnPermitDocument, }, BurnPermitId) => {\n if (isNaN(BurnPermitId)) {\t\n return false\t\n }\n\n const permit = BurnPermit.withId(BurnPermitId)\t\n if (!permit) {\t\n return false\t\n }\n\n let hasForestHealthBurnReason = false\n if (permit.BurnPermitSite && permit.BurnPermitSite.BurnReason) {\n hasForestHealthBurnReason = permit.BurnPermitSite.BurnReason.BurnReasonName === 'FOREST HEALTH'\n }\n\n if (permit.ForestHealthExemptId !== null || hasForestHealthBurnReason) {\n const hasForestHealthDoc = BurnPermitDocument.filter({ BurnPermitId, }).toModelArray()\n .some(d => d.BurnPermitDocumentType && d.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Forest Health Burn Documentation')\n \n return !hasForestHealthDoc\n }\n\n return false\n }\n)","import { createSelector, } from 'reselect'\r\n\r\nimport {\r\n userSelector,\r\n} from './userSelectors'\r\nimport {\r\n ormSelector,\r\n ormWithPropSelector,\r\n ormByIdSelector,\r\n permitByIdSelector,\r\n permitStatusHistory,\r\n propsSelector,\r\n} from './selectors'\r\nimport { agencyPaysByVoucherByPermitId, } from './agencySelectors'\r\nimport { permitNeedsForestHealthDoc, } from './forestHealthSelectors'\r\nimport { userMustSignIssuedPermit, } from './burnPermitPermissionSelectors'\r\nimport { signatureByPermitId, } from './burnPermitSignatureSelectors'\r\n\r\nimport { dateFormatter, getNow, isAfter, } from '../utilities'\r\nimport { formatLegalDesc, } from '../utilities/columnHelpers'\r\n\r\nimport { GetPermitSymbolByStatus, } from '../config/map/symbols'\r\nimport { BURN_PERMIT_STATUS_POINT, } from '../config/map/renderers'\r\nimport { PERSON_TYPE_GOV_AGENT, PERSON_TYPE_AGENT, } from './env'\r\n\r\nimport { baseAppState, } from '../redux/BurnPermitFormRedux'\r\n\r\nexport const burnPermitStateSelector = state => state.BurnPermitForm\r\n\r\nexport const permitSearchSelector = ormSelector(\r\n ({ BurnPermitSearch, }) => {\r\n return BurnPermitSearch.all().toRefArray()\r\n }\r\n)\r\n\r\nexport const permitSearchByIdSelector = ormByIdSelector(\r\n ({ BurnPermitSearch, }, BurnPermitId) => {\r\n return BurnPermitSearch.withId(BurnPermitId)\r\n }\r\n)\r\n\r\nexport const activeBurnPermitIdSelector = createSelector(\r\n burnPermitStateSelector,\r\n state => state ? state.activeBurnPermitId : null\r\n)\r\n\r\nconst burnPermitSearchParamSelector = createSelector(\r\n state => state && state.BurnPermitSearch ? state.BurnPermitSearch.searchParams : null\r\n)\r\n\r\nexport const burnPermitSearchDataSelector = (state) => {\r\n if (state && state.BurnPermitSearch) {\r\n return state.BurnPermitSearch\r\n } \r\n return {}\r\n}\r\n\r\nexport const activeBurnPermitStateSelector = createSelector(\r\n burnPermitStateSelector,\r\n activeBurnPermitIdSelector,\r\n (permitState, activePermitId) => {\r\n if (isNaN(activePermitId) || !permitState) {\r\n return {\r\n activeBurnPermitId : activePermitId || '',\r\n permitFailedToLoad : false,\r\n ...baseAppState,\r\n }\r\n }\r\n \r\n let app = permitState.applications[activePermitId]\r\n if (!app || !Object.keys(app).length) {\r\n app = { ...baseAppState, }\r\n }\r\n \r\n return {\r\n activeBurnPermitId : permitState.activeBurnPermitId,\r\n permitFailedToLoad : permitState.permitFailedToLoad,\r\n applicationSummaryIsShowing : permitState.applicationSummaryIsShowing,\r\n ...app,\r\n }\r\n }\r\n)\r\n\r\nexport const activeBurnPermitSelector = ormSelector(\r\n activeBurnPermitIdSelector,\r\n ({ BurnPermit, }, activePermitId) => {\r\n if (isNaN(activePermitId) || !BurnPermit) {\r\n return null\r\n }\r\n return BurnPermit.withId(activePermitId)\r\n }\r\n)\r\n\r\nexport const permitsOfflineSelector = ormSelector(\r\n burnPermitSearchParamSelector,\r\n ({ BurnPermitSearch, }, searchParams) => {\r\n let results = BurnPermitSearch\r\n searchParams = searchParams || {}\r\n const {\r\n PermitId,\r\n BurnPermitNumber,\r\n AgentName,\r\n LandownerName,\r\n BurnType,\r\n BurnPermitApplicationStatus,\r\n BurnPermitStatus,\r\n MinAcres,\r\n MaxAcres,\r\n MinTons,\r\n MaxTons,\r\n UnitName,\r\n County,\r\n Region,\r\n Address,\r\n LegalDesc,\r\n AssignedTo,\r\n } = searchParams\r\n\r\n if (PermitId) {\r\n results = results.filter({ BurnPermitId: parseInt(PermitId), })\r\n }\r\n\r\n if (BurnPermitNumber) {\r\n results = results.filter(r => r.BurnPermitNumber && r.BurnPermitNumber.toLocaleLowerCase().includes(BurnPermitNumber.toLocaleLowerCase()))\r\n }\r\n\r\n if (AgentName) {\r\n results = results.filter(r => r.Agent && r.Agent.toLocaleLowerCase().includes(AgentName.toLocaleLowerCase()))\r\n }\r\n\r\n if (LandownerName) {\r\n results = results.filter(r => r.Landowner && r.Landowner.toLocaleLowerCase().includes(LandownerName.toLocaleLowerCase()))\r\n }\r\n\r\n if (BurnType) {\r\n results = results.filter({ BurnType, })\r\n }\r\n\r\n if (BurnPermitApplicationStatus) {\r\n results = results.filter({ BurnPermitApplicationStatus, })\r\n }\r\n\r\n if (BurnPermitStatus) {\r\n results = results.filter({ BurnPermitStatus, })\r\n }\r\n\r\n if (AssignedTo) {\r\n results = results.filter({ AssignedTo, })\r\n }\r\n\r\n if (UnitName) {\r\n results = results.filter(r => r.BurnUnitName && r.BurnUnitName.toLocaleLowerCase().includes(UnitName.toLocaleLowerCase()))\r\n }\r\n\r\n if (County) {\r\n results = results.filter({ County, })\r\n }\r\n\r\n if (Region) {\r\n results = results.filter({ Region, })\r\n }\r\n\r\n if (Address) {\r\n results = results.filter(r => \r\n [\r\n `${r.Address1 || ''} ${r.Address2 || ''} ${r.Address3 || ''}`.trim(),\r\n `${r.AddressCity ? ` ${r.AddressCity},` : ''} ${r.AddressState} ${r.AddressZip || ''}`.trim(),\r\n ].join(' ').toLocaleLowerCase().includes(Address.toLocaleLowerCase()))\r\n }\r\n\r\n if (LegalDesc) {\r\n results = results.filter(r => \r\n `${r.LegalDescQ1 || ''} ${r.LegalDescQ2 || ''} S${r.LegalDescSection} T${r.LegalDescTownship} R${r.LegalDescRange} ${r.LegalDescDirection || ''}`\r\n .trim().toLocaleLowerCase().includes(LegalDesc.toLocaleLowerCase())\r\n )\r\n }\r\n\r\n if (MinAcres) {\r\n results = results.filter(r => r.BurnAcres >= MinAcres)\r\n }\r\n\r\n if (MaxAcres) {\r\n results = results.filter(r => r.BurnAcres <= MaxAcres)\r\n }\r\n\r\n if (MinTons) {\r\n results = results.filter(r => r.TotalPermitTonnage >= MinTons)\r\n }\r\n\r\n if (MaxTons) {\r\n results = results.filter(r => r.TotalPermitTonnage <= MaxTons)\r\n }\r\n\r\n return results.all().toRefArray()\r\n }\r\n)\r\n\r\nexport const permitApplicationIsSigned = ormByIdSelector(\r\n ({ BurnPermitSignature, BurnPermitDocument, }, PermitId) => {\r\n if (isNaN(PermitId)) {\r\n return false\r\n }\r\n const id = parseInt(PermitId)\r\n\r\n const signature = BurnPermitSignature.filter({ BurnPermitId: id, }).first()\r\n let isSigned = false\r\n let hasSignature = !!signature\r\n if (hasSignature) {\r\n // Only count signature as being signed if there is an envelopeId and an ApplicantSignedBy\r\n isSigned = !!signature.ApplicationEnvelopeId && !!signature.ApplicationSignedBy\r\n if (!isSigned) {\r\n // Or check if it was signed by DNR and there is a mailed application uploaded\r\n isSigned = BurnPermitDocument\r\n .filter({ BurnPermitId: id, })\r\n .toModelArray()\r\n .some(doc =>\r\n doc.BurnPermitDocumentType\r\n && doc.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Mailed Application'\r\n )\r\n }\r\n }\r\n return isSigned\r\n }\r\n)\r\n\r\nexport const permitApplicationSignedByDnr = ormByIdSelector(\r\n ({ BurnPermitSignature, BurnPermitDocument, }, PermitId) => {\r\n if (isNaN(PermitId)) {\r\n return false\r\n }\r\n const id = parseInt(PermitId)\r\n\r\n const signature = BurnPermitSignature.filter({ BurnPermitId: id, }).first()\r\n let signedByDnr = false\r\n let hasSignature = !!signature\r\n if (hasSignature) {\r\n // check if it was signed by DNR and there is a mailed application uploaded\r\n signedByDnr = BurnPermitDocument\r\n .filter({ BurnPermitId: id, })\r\n .toModelArray()\r\n .some(doc =>\r\n doc.BurnPermitDocumentType\r\n && doc.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Mailed Application'\r\n )\r\n }\r\n return signedByDnr\r\n }\r\n)\r\n\r\nconst latestAppStatusName = ormByIdSelector(\r\n activeBurnPermitIdSelector,\r\n ({ BurnPermitApplicationStatusXref, }, BurnPermitId, activePermitId) => {\r\n BurnPermitId = parseInt(BurnPermitId || activePermitId)\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n const statusXref = BurnPermitApplicationStatusXref\r\n .filter(x => x.BurnPermitId === BurnPermitId)\r\n .orderBy('CreateDate', 'desc')\r\n .first()\r\n if (!statusXref) {\r\n return false\r\n }\r\n return statusXref.BurnPermitApplicationStatus.BurnPermitApplicationStatusName\r\n }\r\n)\r\n\r\nconst latestAppStatusNameByPermitId = ormByIdSelector(\r\n ({ BurnPermitApplicationStatusXref, }, BurnPermitId) => {\r\n BurnPermitId = parseInt(BurnPermitId)\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n const statusXref = BurnPermitApplicationStatusXref\r\n .filter(x => x.BurnPermitId === BurnPermitId)\r\n .orderBy('CreateDate', 'desc')\r\n .first()\r\n if (!statusXref || !statusXref.BurnPermitApplicationStatus) {\r\n return false\r\n }\r\n return statusXref.BurnPermitApplicationStatus.BurnPermitApplicationStatusName\r\n }\r\n)\r\n\r\nconst permitIsPending = createSelector(\r\n latestAppStatusName,\r\n statusName => {\r\n return statusName === 'Pending'\r\n }\r\n)\r\n\r\nconst permitIsSubmitted = createSelector(\r\n latestAppStatusName,\r\n statusName => {\r\n return statusName === 'Submitted'\r\n }\r\n)\r\n\r\nexport const permitByIdIsSubmitted = createSelector(\r\n latestAppStatusNameByPermitId,\r\n statusName => {\r\n return statusName === 'Submitted'\r\n }\r\n)\r\n\r\nexport const permitIsApproved = createSelector(\r\n latestAppStatusName,\r\n statusName => {\r\n return statusName === 'Approved'\r\n }\r\n)\r\n\r\nexport const permitIsDenied = createSelector(\r\n latestAppStatusName,\r\n statusName => {\r\n return statusName === 'Denied'\r\n }\r\n)\r\n\r\nexport const permitIsIssued = ormByIdSelector(\r\n ({ BurnPermitStatusXref, }, BurnPermitId) => {\r\n BurnPermitId = parseInt(BurnPermitId)\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n return BurnPermitStatusXref.filter({ BurnPermitId, }).exists()\r\n }\r\n)\r\n\r\nexport const permitIsExtended = ormByIdSelector(\r\n ({ BurnPermitStatusXref, }, BurnPermitId) => {\r\n BurnPermitId = parseInt(BurnPermitId)\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n const latestPermitStatus = BurnPermitStatusXref\r\n .filter({ BurnPermitId, })\r\n .orderBy('BurnPermitStatusXrefId', 'desc')\r\n .first()\r\n return latestPermitStatus \r\n && latestPermitStatus.BurnPermitStatus\r\n && latestPermitStatus.BurnPermitStatus.BurnPermitStatusName === 'Extended'\r\n }\r\n)\r\n\r\nexport const permitApplicationIsPaid = ormByIdSelector(\r\n ({ BurnPermitOrderXref, }, BurnPermitId) => {\r\n BurnPermitId = parseInt(BurnPermitId)\r\n const orderExists = BurnPermitOrderXref.filter({ BurnPermitId, }).toModelArray().some(o => !!o.BurnPermitOrder)\r\n return orderExists\r\n }\r\n)\r\n\r\nexport const permitHasPermitSignatures = ormByIdSelector(\r\n ({ BurnPermitSignature, }, PermitId) => {\r\n if (isNaN(PermitId)) {\r\n return { agency: false, applicant: false, }\r\n }\r\n\r\n const signature = BurnPermitSignature.all().filter({ BurnPermitId: PermitId, }).first()\r\n if (signature) {\r\n return { \r\n dnrSubmission : signature.ApplicationSignedBy && !signature.ApplicationEnvelopeId ? true : false,\r\n agency : signature.PermitApproverSignedBy ? true : false,\r\n applicant : signature.PermitApplicantSignedBy ? true : false,\r\n }\r\n }\r\n return { agency: false, applicant: false, }\r\n }\r\n)\r\n\r\nexport const permitPeopleIds = ormByIdSelector(\r\n permitByIdSelector,\r\n (orm, PermitId, permit) => {\r\n if (isNaN(PermitId) || !permit) {\r\n return {\r\n BurnerId : null,\r\n AgentId : null,\r\n }\r\n }\r\n return {\r\n BurnerId : permit.BurnerId,\r\n AgentId : permit.AgentId,\r\n }\r\n }\r\n)\r\n\r\n/**\r\n * Returns the Burner Id of the Permit if found with the provided `PermitId`\r\n * @param {Object} state \r\n * @param {Number} PermitId\r\n * @returns {Number}\r\n */\r\nexport const permitBurnerId = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => {\r\n if (!permit) {\r\n return null\r\n }\r\n return permit.BurnerId\r\n }\r\n)\r\n\r\nexport const permitEstimatedFee = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => {\r\n if (!permit) {\r\n return ''\r\n }\r\n return permit.BurnPermitEstimatedFee || ''\r\n }\r\n)\r\n\r\nexport const permitTotalPermitTonnage = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => {\r\n if (!permit) {\r\n return ''\r\n }\r\n return permit.TotalPermitTonnage || ''\r\n }\r\n)\r\n\r\nexport const permitDaysSelector = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return []\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit || !permit.BurnPermitSite) {\r\n return []\r\n }\r\n\r\n const days = permit.BurnPermitSite.DaysOfWeek.toModelArray()\r\n const dayIds = days.map(d => d.DayOfWeekId)\r\n return dayIds\r\n }\r\n)\r\n\r\nexport const permitApplicationDocuments = ormByIdSelector(\r\n permitStatusHistory,\r\n (session, BurnPermitId, statusHistory) => {\r\n const { BurnPermit, } = session\r\n if (isNaN(BurnPermitId)) {\r\n return []\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return []\r\n }\r\n\r\n let latestStatus, submittedStatus, approvedStatus, ReadOnly\r\n if (Array.isArray(statusHistory) && statusHistory.length) {\r\n latestStatus = statusHistory[0]\r\n // if the permit is expired or revoked, or the application is denied, all docs are readonly\r\n ReadOnly = isAfter(permit.ExpirationDate, (new Date()).toJSON()) || latestStatus.Status === 'Revoked' || latestStatus.Status === 'Denied'\r\n submittedStatus = statusHistory.filter(h => h.Status === 'Submitted')[0]\r\n approvedStatus = statusHistory.filter(h => h.Status === 'Approved')[0]\r\n }\r\n\r\n const docs = permit.BurnPermitDocument.toModelArray()\r\n .map(d => {\r\n let docIsReadOnly = ReadOnly\r\n // if it's not readonly, check if the document is readonly or not\r\n if (!docIsReadOnly) {\r\n if (d.BurnPermitDocumentType && d.BurnPermitDocumentType.InternalUseOnly) {\r\n docIsReadOnly = d.BurnPermitDocumentType.InternalUseOnly\r\n }\r\n else if (latestStatus) {\r\n const { Status, } = latestStatus\r\n // If it's Issued or Approved, compare to the Approved date\r\n if (approvedStatus) {\r\n docIsReadOnly = d.CreateDate < approvedStatus.StatusDate\r\n }\r\n else if (submittedStatus && (Status === 'Submitted' || Status === 'Under Review' || Status === 'Info Required')) {\r\n docIsReadOnly = d.CreateDate < submittedStatus.StatusDate\r\n }\r\n else {\r\n docIsReadOnly = false\r\n }\r\n }\r\n }\r\n return {\r\n BurnPermitDocumentId : d.BurnPermitDocumentId,\r\n DocumentName : d.DocumentName,\r\n BurnPermitDocumentTypeId : d.BurnPermitDocumentTypeId,\r\n CreateBy : d.CreateBy,\r\n CreateDate : d.CreateDate,\r\n UpdateBy : d.UpdateBy,\r\n UpdateDate : d.UpdateDate,\r\n ReadOnly : docIsReadOnly,\r\n }\r\n })\r\n return docs\r\n }\r\n)\r\n\r\n/**\r\n * Returns an array containing either a document of type Mailed Application\r\n * or the Signed Application and Signed Application Certificate documents\r\n */\r\nexport const applicationSignatureDocuments = ormByIdSelector(\r\n permitStatusHistory,\r\n ({ BurnPermitDocument, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return []\r\n }\r\n const docs = BurnPermitDocument\r\n .filter(d =>\r\n d.BurnPermitId === BurnPermitId\r\n && d.DocumentName.includes('Application')\r\n )\r\n .orderBy('CreateDate', 'desc')\r\n const app = docs.filter(d => d.DocumentName.includes('Certificate') === false).first()\r\n const cert = docs.filter(d => d.DocumentName.includes('Certificate')).first()\r\n return [ app, cert, ]\r\n }\r\n)\r\n\r\n/**\r\n * Returns an array containing the Signed Permit and Signed Permit Certificate documents\r\n */\r\nexport const permitSignatureDocuments = ormByIdSelector(\r\n permitStatusHistory,\r\n ({ BurnPermitDocument, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return []\r\n }\r\n const docs = BurnPermitDocument\r\n .all()\r\n .toModelArray()\r\n .filter(d =>\r\n d.BurnPermitId === BurnPermitId\r\n && d.BurnPermitDocumentType\r\n && d.BurnPermitDocumentType.BurnPermitDocumentTypeName.includes('Permit')\r\n )\r\n let app = null, cert = null\r\n if (docs.length) {\r\n app = docs.filter(d =>\r\n d.BurnPermitDocumentType\r\n && d.BurnPermitDocumentType.BurnPermitDocumentTypeName.includes('Certificate') === false\r\n )[0]\r\n cert = docs.filter(d =>\r\n d.BurnPermitDocumentType\r\n && d.BurnPermitDocumentType.BurnPermitDocumentTypeName.includes('Certificate')\r\n )[0]\r\n }\r\n return [ app, cert, ]\r\n }\r\n)\r\n\r\nexport const documentTypesForSelect = ormSelector(\r\n ({ BurnPermitDocumentType, }) => {\r\n const docTypes = BurnPermitDocumentType.all()\r\n return docTypes.toRefArray()\r\n .map(t => {\r\n return {\r\n Value : t.BurnPermitDocumentTypeId,\r\n Text : t.BurnPermitDocumentTypeName,\r\n Description : t.BurnPermitDocumentTypeDescription,\r\n ReadOnly : t.InternalUseOnly,\r\n }\r\n })\r\n }\r\n)\r\n\r\nconst pileTypeSelected = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit || !permit.BurnPermitArea) {\r\n return false\r\n }\r\n\r\n return permit.BurnPermitArea.BurnTypes\r\n .all()\r\n .toRefArray()\r\n .some(t => t.BurnTypeName === 'Pile')\r\n }\r\n)\r\n\r\nconst permitNeedsTonnageCalculationDoc = ormByIdSelector(\r\n pileTypeSelected,\r\n ({ BurnPermit, BurnPermitDocument, }, BurnPermitId, hasPileTypeSelected) => {\r\n if (!hasPileTypeSelected) {\r\n return hasPileTypeSelected\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n const requiresTonnageDoc = permit.BurnPermitArea && permit.BurnPermitArea.HarvestAcres >= 10\r\n\r\n if (requiresTonnageDoc) {\r\n const hasTonnageCalculationDoc = BurnPermitDocument.filter({ BurnPermitId, }).toModelArray()\r\n .some(d =>\r\n d.BurnPermitDocumentType\r\n && d.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Tonnage Calculations'\r\n )\r\n\r\n return !hasTonnageCalculationDoc\r\n }\r\n\r\n return false\r\n }\r\n)\r\n\r\nconst permitNeedsPileLocDoc = ormByIdSelector(\r\n pileTypeSelected,\r\n ({ BurnPermit, BurnPermitDocument, }, BurnPermitId, hasPileTypeSelected) => {\r\n if (!hasPileTypeSelected) {\r\n return hasPileTypeSelected\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n\r\n\r\n let requiresPileLocationMap = false\r\n if (permit.BurnPermitArea) {\r\n const hasMultipleBurnTypes = permit.BurnPermitArea.BurnTypes.all().toRefArray().some(t => t.BurnTypeName !== 'Pile')\r\n if (permit.BurnPermitArea.HarvestAcres >= 10 || hasMultipleBurnTypes) {\r\n requiresPileLocationMap = true\r\n }\r\n }\r\n\r\n if (requiresPileLocationMap) {\r\n const hasPileLocationMap = BurnPermitDocument.filter({ BurnPermitId, }).toModelArray()\r\n .some(d =>\r\n d.BurnPermitDocumentType &&\r\n d.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Pile Location Map'\r\n )\r\n return !hasPileLocationMap\r\n }\r\n\r\n return false\r\n }\r\n)\r\n\r\nexport const documentsSectionIsValid = createSelector(\r\n permitNeedsForestHealthDoc,\r\n permitNeedsTonnageCalculationDoc,\r\n permitNeedsPileLocDoc,\r\n (needsForestDoc, needsTonnageDocs, needsPileLocDoc) => {\r\n const validationInfo = {\r\n needsForestDoc,\r\n needsTonnageDocs,\r\n needsPileLocDoc,\r\n }\r\n return {\r\n ...validationInfo,\r\n isValid: Object.values(validationInfo).every(v => v === false),\r\n }\r\n }\r\n)\r\n\r\n/**\r\n * Check to see if the permit exists, is issued, is valid, and is not suspended\r\n * @param {Object} state - app state\r\n * @param {Number} BurnPermitId - id of the burn permit to inspect\r\n * @returns {Array} true if the permit can be used to submit requests\r\n */\r\nexport const permitIsActiveSelector = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return [ false, 'Invalid Permit ID provided', ]\r\n }\r\n\r\n // permit not found\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return [ false, 'Cannot find Permit for Permit Id ' + BurnPermitId + '.', ]\r\n }\r\n\r\n // no permit statuses means it's still an application\r\n if (!permit.BurnPermitStatusXrefs.exists()) {\r\n return [ false, 'Application is not Approved.', ]\r\n }\r\n\r\n // status isn't issued or extended\r\n const currentStatus = permit.BurnPermitStatusXrefs.orderBy('StatusDate', 'Desc').first()\r\n if (!currentStatus || (currentStatus.BurnPermitStatus && currentStatus.BurnPermitStatus.BurnPermitStatusName.includes('Issued') === false && currentStatus.BurnPermitStatus.BurnPermitStatusName !== 'Extended')) {\r\n return [ false, 'Permit is not Issued.', ]\r\n }\r\n\r\n const validDate = dateFormatter(permit.BurnPermitValidDate)\r\n const now = getNow()\r\n // no valid date set or permit isn't valid yet\r\n if (!validDate || !validDate.isValid() || now.isBefore(validDate)) {\r\n let msg = 'Permit is not valid'\r\n if (validDate) {\r\n msg += ' until ' + validDate.format('ddd MMM D, YYYY') + '.'\r\n }\r\n else {\r\n msg += ' until a DNR representative sets the Valid date.'\r\n }\r\n return [ false, msg, ]\r\n }\r\n \r\n const expDate = dateFormatter(permit.BurnPermitExpirationDate)\r\n // if an expiration date is set and we're after it\r\n if (expDate.isValid() && now.isAfter(expDate)) {\r\n return [ false, 'Permit Expired on ' + expDate.format('ddd MMM D, YYYY'), ]\r\n }\r\n\r\n const suspStart = dateFormatter(permit.SuspensionStartDate)\r\n const startIsValid = !!suspStart && suspStart.isValid()\r\n\r\n const suspEnd = dateFormatter(permit.SuspensionEndDate)\r\n const endIsValid = !!suspEnd && suspEnd.isValid()\r\n\r\n // we're in the suspension period\r\n if (startIsValid && now.isAfter(suspStart)) {\r\n // in the suspension period or no end set\r\n if (!endIsValid || now.isBefore(suspEnd)) {\r\n return [ false, 'Permit is suspended as of ' + suspStart.format('ddd MMM D, YYYY'), ]\r\n }\r\n // suspension period has ended\r\n return [ true, '', ]\r\n }\r\n // we're waiting for a suspension to end without a start date\r\n if (!startIsValid && endIsValid && now.isBefore(suspEnd)) {\r\n return [ false, 'Permit is suspended until ' + suspEnd.format('ddd MMM D, YYYY'), ]\r\n }\r\n return [ true, '', ]\r\n }\r\n)\r\n\r\nexport const permitHasDatesSet = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return false\r\n }\r\n\r\n const validDate = dateFormatter(permit.BurnPermitValidDate)\r\n const expDate = dateFormatter(permit.BurnPermitExpirationDate)\r\n return (validDate && validDate.isValid()) && (expDate && expDate.isValid())\r\n }\r\n)\r\n\r\nexport const permitDates = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return []\r\n }\r\n\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return []\r\n }\r\n\r\n const ValidDate = dateFormatter(permit.BurnPermitValidDate, 'YYYY-MM-DD')\r\n const ExpirationDate = dateFormatter(permit.BurnPermitExpirationDate, 'YYYY-MM-DD')\r\n const SuspensionStartDate = dateFormatter(permit.SuspensionStartDate, 'YYYY-MM-DD')\r\n const SuspensionEndDate = dateFormatter(permit.SuspensionEndDate, 'YYYY-MM-DD')\r\n const RevokeStatus = permit.BurnPermitStatuses.filter({ BurnPermitStatusName: 'Revoked', }).first()\r\n let RevokedDate\r\n let RevokedComment\r\n if (RevokeStatus) {\r\n RevokedDate = dateFormatter(RevokeStatus.BurnPermitStatusXrefs.first().StatusDate, 'YYYY-MM-DD')\r\n RevokedComment = RevokeStatus.BurnPermitStatusXrefs.first().Comment\r\n }\r\n const SuspensionComment = permit.SuspensionComment\r\n return {\r\n ValidDate,\r\n ExpirationDate,\r\n SuspensionStartDate,\r\n SuspensionEndDate,\r\n SuspensionComment,\r\n RevokedDate,\r\n RevokedComment,\r\n }\r\n }\r\n)\r\n\r\n/**\r\n * Check to see if the permit is suspended\r\n * @param {Object} state - app state\r\n * @param {Number} BurnPermitId - id of the burn permit to inspect\r\n * @returns {Boolean} true if the permit can be used to submit requests\r\n */\r\nexport const permitIsSuspendedSelector = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => {\r\n if (!permit) {\r\n return false\r\n }\r\n\r\n const now = getNow()\r\n\r\n const suspStart = dateFormatter(permit.SuspensionStartDate)\r\n const startIsValid = !!suspStart && suspStart.isValid()\r\n\r\n const suspEnd = dateFormatter(permit.SuspensionEndDate)\r\n const endIsValid = !!suspEnd && suspEnd.isValid()\r\n\r\n // we're in the suspension period \r\n if (startIsValid && now.isAfter(suspStart)) {\r\n if (!endIsValid || now.isBefore(suspEnd)) {\r\n return true\r\n }\r\n return false\r\n }\r\n // unknown start, check that we're after the end\r\n if (!startIsValid && endIsValid && now.isBefore(suspEnd)) {\r\n return true\r\n }\r\n return false\r\n }\r\n)\r\n\r\n/**\r\n * Check to see if the permit is revoked\r\n * @param {Object} state - app state\r\n * @returns {Boolean} true if the permit can be used to submit requests\r\n */\r\nexport const permitIsRevokedSelector = ormByIdSelector(\r\n permitStatusHistory,\r\n (_, __, history) => {\r\n if (!Array.isArray(history) || !history.length) {\r\n return false\r\n }\r\n return history[0].Status === 'Revoked'\r\n }\r\n)\r\n\r\n/**\r\n * Check to see if the permit is expired\r\n * @param {Object} state - app state\r\n * @returns {Boolean}\r\n */\r\nexport const permitIsExpiredSelector = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => {\r\n if (!permit) {\r\n return false\r\n }\r\n \r\n return isAfter(permit.BurnPermitExpirationDate, (new Date()).toJSON())\r\n }\r\n)\r\n\r\n/**\r\n * Check to see if the permit is denied\r\n * @param {Object} state - app state\r\n * @returns {Boolean}\r\n */\r\nexport const permitIsDeniedSelector = ormByIdSelector(\r\n permitStatusHistory,\r\n (session, history) => {\r\n if (!Array.isArray(history) || !history.length) {\r\n return false\r\n }\r\n return history[0].Status === 'Denied'\r\n }\r\n)\r\n\r\nexport const permitMapDataSelector = ormWithPropSelector(\r\n ({ BurnPermitSearch, }, showLandownerAgent) => {\r\n \r\n const fields = [\r\n {\r\n name : 'BurnPermitId',\r\n visible : false,\r\n },\r\n {\r\n name : 'BurnPermitNumber',\r\n label : 'Burn Permit Number',\r\n },\r\n {\r\n name : 'BurnTypes',\r\n label : 'Burn Types',\r\n },\r\n {\r\n name : 'Address',\r\n label : 'Address',\r\n },\r\n {\r\n name : 'LegalDesc',\r\n label : 'Legal Desc.',\r\n },\r\n {\r\n name : 'HarvestAcres',\r\n label : 'Harvest Acres',\r\n },\r\n {\r\n name : 'ExpirationDate',\r\n label : 'Expiration Date',\r\n },\r\n {\r\n name : 'Status',\r\n label : 'Status',\r\n },\r\n {\r\n name : 'StatusDate',\r\n label : 'Status Date',\r\n },\r\n {\r\n name : 'TotalRequestedAcres',\r\n label : 'Total Requested Acres',\r\n },\r\n {\r\n name : 'TotalPermitTonnage',\r\n label : 'Est. Permit Tonnage',\r\n },\r\n {\r\n name : 'TotalRequestedTons',\r\n label : 'Total Requested Tons',\r\n },\r\n {\r\n name : 'PlannedIgnitionDates',\r\n label : 'Planned Ignition Dates',\r\n },\r\n {\r\n name : 'IsUGA',\r\n label : 'Is in UGA',\r\n },\r\n {\r\n name : 'IsForestHealthExempt',\r\n label : 'Is Forest Health Exempt',\r\n },\r\n {\r\n name : 'UnitName',\r\n label : 'Burn Unit Name',\r\n },\r\n {\r\n name : 'LatLong',\r\n label : 'Lat, Long',\r\n },\r\n ]\r\n\r\n if (showLandownerAgent) {\r\n const landowner = {\r\n name : 'Landowner',\r\n label : 'Landowner',\r\n }\r\n const agent = {\r\n name : PERSON_TYPE_AGENT,\r\n label : PERSON_TYPE_AGENT,\r\n }\r\n fields.splice(fields.findIndex(c => c.name === 'BurnTypes'), 0, landowner)\r\n fields.splice(fields.findIndex(c => c.name === 'BurnTypes'), 0, agent)\r\n }\r\n\r\n const layer = {\r\n layerTitle : 'Burn Permits',\r\n layerId : 'BurnPermits',\r\n renderer : BURN_PERMIT_STATUS_POINT,\r\n data : [],\r\n fields,\r\n idField : 'BurnPermitId',\r\n title : 'Burn Permit Application ID: {BurnPermitId}',\r\n }\r\n \r\n let data = BurnPermitSearch.all().filter(r => !!r.Longitude && !!r.Latitude)\r\n if (data.exists() === false) {\r\n return layer\r\n }\r\n data = data.toRefArray()\r\n \r\n for (let i = 0, len = data.length; i < len; i++) {\r\n const row = data[i]\r\n const {\r\n Latitude,\r\n Longitude,\r\n BurnPermitId,\r\n BurnPermitNumber,\r\n Address,\r\n BurnAcres,\r\n BurnTypes,\r\n BurnUnitName,\r\n BurnPermitStatus,\r\n BurnPermitStatusDate,\r\n BurnPermitApplicationStatus,\r\n BurnPermitApplicationStatusDate,\r\n BurnPermitExpirationDate,\r\n PlannedIgnitionDates,\r\n TotalPermitTonnage,\r\n TotalRequestedAcres,\r\n TotalRequestedTons,\r\n IsUGA,\r\n IsForestHealthExempt,\r\n } = row\r\n\r\n let Agent = '', Landowner = ''\r\n if (showLandownerAgent) {\r\n Agent = row.Agent\r\n Landowner = row.Landowner\r\n }\r\n \r\n const symbol = GetPermitSymbolByStatus(BurnPermitStatus || BurnPermitApplicationStatus, IsUGA)\r\n layer.data.push({\r\n geometry: {\r\n type : 'point',\r\n latitude : Latitude,\r\n longitude : Longitude,\r\n },\r\n attributes: {\r\n Agent,\r\n Landowner,\r\n BurnPermitNumber,\r\n BurnTypes,\r\n Address,\r\n PlannedIgnitionDates,\r\n TotalRequestedAcres,\r\n TotalPermitTonnage,\r\n TotalRequestedTons,\r\n BurnPermitId : BurnPermitId.toString(),\r\n UnitName : BurnUnitName,\r\n LegalDesc : formatLegalDesc(row),\r\n Status : BurnPermitStatus || BurnPermitApplicationStatus,\r\n StatusDate : dateFormatter(BurnPermitStatusDate || BurnPermitApplicationStatusDate, 'MMM DD, YYYY'),\r\n ExpirationDate : dateFormatter(BurnPermitExpirationDate, 'MMM DD, YYYY'),\r\n HarvestAcres : BurnAcres,\r\n IsUGA : IsUGA ? 'Yes' : 'No',\r\n IsForestHealthExempt : IsForestHealthExempt === null ? 'N/A' : IsForestHealthExempt ? 'Yes' : 'No',\r\n LatLong : `${Latitude}, ${Longitude}`,\r\n },\r\n symbol,\r\n })\r\n }\r\n return layer\r\n }\r\n)\r\n\r\nexport const permitSummaryDataComplete = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return false\r\n }\r\n const allDataExists = []\r\n \r\n if (permit.BurnerId) {\r\n allDataExists.push(permit.Burner != null)\r\n }\r\n \r\n if (permit.AgentId) {\r\n allDataExists.push(permit.Agent != null)\r\n if (permit.Agent != null){\r\n allDataExists.push(permit.Agent.Agencies !== null && permit.Agent.Agencies.count() > 0)\r\n }\r\n }\r\n \r\n allDataExists.push(permit.BurnPermitSiteId !== null && permit.BurnPermitSite != null)\r\n allDataExists.push(permit.BurnPermitAreaId !== null && permit.BurnPermitArea != null)\r\n allDataExists.push(permit.BurnPermitLocationId !== null && permit.BurnPermitLocation != null)\r\n allDataExists.push(permit.BurnPermitStatuses !== null && permit.BurnPermitStatuses.count() > 0)\r\n allDataExists.push(permit.BurnPermitSignature !== null && permit.BurnPermitSignature.count() > 0)\r\n\r\n \r\n // If it is a Permit that is for Forest Health, check to see if we have the Exemption data\r\n const isForestHealthBurn = permit.BurnPermitSite && permit.BurnPermitSite.BurnReason && permit.BurnPermitSite.BurnReason.BurnReasonName === 'FOREST HEALTH'\r\n // All migrated permits have a Forest Health Exempt record, but they don't have the new burn reason\r\n // So if it's a burn request against a migrated permit, use a fallback to get the data in case it is exempt\r\n if (isForestHealthBurn || permit.LegacyId !== null) {\r\n allDataExists.push(permit.ForestHealthExempt !== null)\r\n }\r\n\r\n return allDataExists.every(d => d)\r\n }\r\n)\r\n\r\nexport const burnPermitNumberById = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return ''\r\n }\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit) {\r\n return ''\r\n }\r\n return permit.BurnPermitNumber || ''\r\n }\r\n)\r\n\r\nexport const burnTypesByBurnPermitId = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return []\r\n }\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit || !permit.BurnPermitArea) {\r\n return []\r\n }\r\n return permit.BurnPermitArea.BurnTypes.toModelArray().map(t => t.BurnTypeName)\r\n }\r\n)\r\n\r\n\r\nexport const userIsBurnerOrAgent = createSelector(\r\n (state, permitId) => permitId,\r\n permitByIdSelector,\r\n userSelector,\r\n (permitId, permit, user) => {\r\n if (isNaN(permitId) || !permit || !user) {\r\n return false\r\n }\r\n if (permit.BurnerId === user.personId) {\r\n return true\r\n } else if (permit.AgentId === user.personId && user.isVerifiedAgent) {\r\n return true\r\n }\r\n return false\r\n }\r\n)\r\n\r\nexport const permitApplicationStatus = ormByIdSelector(\t\r\n ({ BurnPermit, }, BurnPermitId) => {\t\r\n if (isNaN(BurnPermitId)) {\t\r\n return null\t\r\n }\t\r\n const permit = BurnPermit.withId(BurnPermitId)\t\r\n if (!permit) {\t\r\n return null\t\r\n }\t\r\n\r\n const xref = permit.BurnPermitApplicationStatusXrefs.orderBy('CreateDate', 'desc').first()\t\r\n if (xref) {\t\r\n return {\t\r\n BurnPermitApplicationStatusXrefId : xref.BurnPermitApplicationStatusXrefId,\t\r\n CreateBy : xref.CreateBy,\t\r\n StatusDate : xref.StatusDate,\t\r\n SiteInspected : xref.SiteInspected,\t\r\n Comment : xref.Comment,\t\r\n Status : xref.BurnPermitApplicationStatus ? xref.BurnPermitApplicationStatus.BurnPermitApplicationStatusName : null,\t\r\n StatusDescription : xref.BurnPermitApplicationStatus ? xref.BurnPermitApplicationStatus.BurnPermitApplicationStatusDescription : null,\t\r\n BurnPermitApplicationStatusId : xref.BurnPermitApplicationStatusId,\t\r\n CreateDate : xref.CreateDate,\t\r\n UpdateBy : xref.UpdateBy,\t\r\n UpdateDate : xref.UpdateDate,\t\r\n }\t\r\n }\t\r\n return null\t\r\n }\t\r\n)\r\n\r\nconst personIsGovAgent = (person) => {\r\n if (!person || !person.PersonType) {\r\n return false\r\n }\r\n return person.PersonType.PersonTypeName === PERSON_TYPE_GOV_AGENT\r\n}\r\n\r\nconst burnerIsGovAgentType = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => permit && personIsGovAgent(permit.Burner)\r\n)\r\n\r\nconst agentIsGovAgentType = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => permit && personIsGovAgent(permit.Agent)\r\n)\r\n\r\nexport const activePermitIsLegacy = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => permit ? !!permit.LegacyId : false\r\n)\r\n\r\nexport const isGovAgentPermit = ormSelector(\r\n burnerIsGovAgentType,\r\n agentIsGovAgentType,\r\n (session, burnerIsGovAgent, agentIsGovAgent) => burnerIsGovAgent || agentIsGovAgent\r\n)\r\n\r\n\r\nexport const permitIsInUGA = ormByIdSelector(\r\n ({ BurnPermit, }, permitId) => {\r\n if (isNaN(permitId)) {\r\n return false\r\n }\r\n const permit = BurnPermit.withId(permitId)\r\n if (!permit || !permit.BurnPermitLocation) {\r\n return false\r\n }\r\n const { IsUGA, } = permit.BurnPermitLocation\r\n return IsUGA\r\n }\r\n)\r\n\r\n\r\nexport const permitIsForForestHealth = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\t\r\n if (isNaN(BurnPermitId)) {\t\r\n return false\t\r\n }\t\r\n const permit = BurnPermit.withId(BurnPermitId)\t\r\n if (!permit) {\t\r\n return false\t\r\n }\t\r\n\r\n let isForestHealth = permit.ForestHealthExempt !== null && permit.ForestHealthExempt.ForestHealthExemptionApprovalFlag\r\n if (!isForestHealth && permit.BurnPermitSite && permit.BurnPermitSite.BurnReason) {\r\n isForestHealth = permit.BurnPermitSite.BurnReason.BurnReasonName === 'FOREST HEALTH'\r\n }\r\n return isForestHealth\r\n }\t\r\n)\r\n\r\nexport const permitHasSignedPermitDoc = ormWithPropSelector(\r\n permitIsExtended,\r\n signatureByPermitId,\r\n permitApplicationSignedByDnr,\r\n ({ BurnPermitDocument, }, BurnPermitId, isExtended, signature, signedByDnr) => {\r\n if (isNaN(BurnPermitId)) {\r\n return false\r\n }\r\n let hasSignedPermit = BurnPermitDocument\r\n .filter({ BurnPermitId, })\r\n .toModelArray()\r\n .some(d =>\r\n d.BurnPermitDocumentType\r\n && d.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Signed Permit'\r\n )\r\n // Also check if the permit status is extended\r\n // and if the applicant has signed, don't consider the\r\n // previous signed docs as valid as long as it is not\r\n // an app that was created for them by DNR\r\n if (isExtended && !signature.PermitApplicantSignedBy && !signedByDnr) {\r\n hasSignedPermit = false\r\n }\r\n return hasSignedPermit\r\n }\r\n)\r\n\r\n\r\nexport const permitsByIds = ormWithPropSelector(\r\n ({ BurnPermit, }, BurnPermitIds) => {\r\n if (Array.isArray(BurnPermitIds) === false || BurnPermitIds.length === 0) {\r\n return []\r\n }\r\n return BurnPermit.filter(p => BurnPermitIds.includes(p.BurnPermitId)).toModelArray()\r\n }\r\n)\r\n\r\n\r\nconst arrayValuesAreUnique = arr => arr.filter((val, idx, arr) => arr.indexOf(val) === idx).length === 1\r\n\r\n\r\nexport const checkAllPermitsBelongToSameBurnerOrAgent = ormWithPropSelector(\r\n ({ BurnPermit, }, BurnPermitIds) => {\r\n let allSameBurner, allSameAgent\r\n if (Array.isArray(BurnPermitIds) === false || BurnPermitIds.length === 0) {\r\n allSameBurner = false\r\n allSameAgent = false\r\n return { allSameBurner, allSameAgent, }\r\n }\r\n \r\n const permits = BurnPermit.filter(p => BurnPermitIds.includes(p.BurnPermitId)).toRefArray()\r\n \r\n // Checks that all the BurnerIds are the same, if there are any\r\n const burnerIds = permits.map(p => p.BurnerId)\r\n if (burnerIds.length) {\r\n allSameBurner = arrayValuesAreUnique(burnerIds)\r\n }\r\n // Checks that all the AgentIds are the same, if there are any\r\n const agentIds = permits.map(p => p.AgentId)\r\n if (agentIds.length) {\r\n allSameAgent = arrayValuesAreUnique(agentIds)\r\n }\r\n \r\n return { allSameBurner, allSameAgent, }\r\n }\r\n)\r\n\r\nexport const hasIssuedPermits = ormWithPropSelector(\r\n ({ Agency, BurnPermit, }, BurnPermitIds) => {\r\n if (Array.isArray(BurnPermitIds) === false || BurnPermitIds.length === 0) {\r\n return false\r\n }\r\n return BurnPermit.filter(p => BurnPermitIds.includes(p.BurnPermitId))\r\n .toModelArray()\r\n .map(p => {\r\n let autoAgency = false\r\n if (p.Agency && p.Agency.AutoRegionApproval) {\r\n autoAgency = true\r\n } else {\r\n const agency = Agency.withId(p.AgencyId)\r\n if (agency && agency.AutoRegionApproval) {\r\n autoAgency = true\r\n }\r\n }\r\n return {\r\n permitNumber: p.BurnPermitNumber,\r\n autoAgency,\r\n }\r\n })\r\n .some(n => !!n.permitNumber && !n.autoAgency)\r\n }\r\n)\r\n\r\nexport const invalidSteps = createSelector(\r\n activeBurnPermitStateSelector,\r\n state => state.invalidSteps\r\n)\r\n\r\nexport const burnPermitByIdSelector = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n return BurnPermit.withId(BurnPermitId)\r\n }\r\n)\r\n\r\nexport const shouldShowApplicationNextSteps = createSelector(\r\n permitIsPending,\r\n permitApplicationIsPaid,\r\n permitIsSubmitted,\r\n permitApplicationIsSigned,\r\n permitIsApproved,\r\n permitIsDenied,\r\n permitIsIssued,\r\n agencyPaysByVoucherByPermitId,\r\n (isPending, isPaid, isSubmitted, isSigned, isApproved, isDenied, isIssued, paysByVoucher) => {\r\n return {\r\n isPending,\r\n isPaid,\r\n isSubmitted,\r\n isApproved,\r\n isDenied,\r\n isSigned,\r\n isIssued,\r\n paysByVoucher,\r\n }\r\n }\r\n)\r\n\r\nexport const shouldShowPermitNextSteps = createSelector(\r\n permitIsIssued,\r\n permitHasPermitSignatures,\r\n userMustSignIssuedPermit,\r\n permitHasSignedPermitDoc,\r\n (isIssued, signatures, mustSignPermit, hasSignedDoc) => {\r\n return isIssued \r\n && (\r\n // We don't need to show the PermitNextSteps if it is issued and signed.\r\n // One way to determine if the Permit is fully Issued and Signed is to\r\n // check to see if the signed docs are downloaded.\r\n // These docs do not get downloaded by the API unless the requisite signatures have\r\n // been made, so once we have those, we don't need to also check the signatures.\r\n // This covers all user signing scenarios, including when issuing a Permit\r\n // to a non-user Agent of an Agency where other Agents of that Agency are\r\n // users and need to make Burn Requests on the permit issued to a non-user Agent\r\n !hasSignedDoc\r\n ? (\r\n signatures.agency === true\r\n && signatures.applicant === false\r\n )\r\n : false\r\n )\r\n && mustSignPermit\r\n }\r\n)\r\n\r\nexport const permitSectionIsActive = createSelector(\r\n burnPermitStateSelector,\r\n propsSelector,\r\n (state, sectionId) => {\r\n const { applications, activeBurnPermitId, } = state\r\n return applications[activeBurnPermitId].activeStep === sectionId\r\n }\r\n)\r\n\r\nexport const permitCanAcceptDocumentUploads = ormByIdSelector(\r\n permitIsExpiredSelector,\r\n permitIsRevokedSelector,\r\n permitIsDeniedSelector,\r\n (_, __, isExpired, isRevoked, isDenied) => {\r\n return !isExpired && !isRevoked && !isDenied\r\n }\r\n)\r\n","import { createSelector, } from 'reselect'\r\nimport { ormSelector, networkStateSelector, ormByIdSelector, burnPermitAreaByIdSelector, } from './selectors'\r\nimport { activeBurnPermitIdSelector, permitCanAcceptDocumentUploads, } from './burnPermitSelectors'\r\n\r\nimport BurnPermitPileGroup from '../models/BurnPermitPileGroup'\r\n\r\nconst BURN_PERMIT_PILE_GROUP_VALIDATION_SCHEMA = BurnPermitPileGroup.validationSchema\r\n\r\nconst pileGroupState = state => state.BurnPermitPileGroups\r\n\r\nexport const activePileGroupId = createSelector(\r\n pileGroupState,\r\n state => state.EditBurnPermitPileGroupId\r\n)\r\n\r\nexport const activePileGroup = ormSelector(\r\n activePileGroupId,\r\n ({ BurnPermitPileGroup, }, BurnPermitPileGroupId) => {\r\n return BurnPermitPileGroup.withId(BurnPermitPileGroupId)\r\n }\r\n)\r\n\r\nexport const pileGroupById = ormByIdSelector(\r\n ({ BurnPermitPileGroup, }, BurnPermitPileGroupId) => {\r\n return BurnPermitPileGroup.withId(BurnPermitPileGroupId)\r\n }\r\n)\r\n\r\n/**\r\n * Translated from the PileConstants.java in the PilesCalculator source.\r\n * The order of values in this array is intentional to match the\r\n * constant values on the server used by the calculator.\r\n */\r\nconst PILE_SHAPE_CATEGORIES = [\r\n 'Half Sphere',\r\n 'Parabaloid',\r\n 'Half Cylinder',\r\n 'Half Cone Frustrum',\r\n 'Cone Rounded',\r\n 'Half Ellipsoid',\r\n 'Irregular',\r\n]\r\nconst pileShapeCategories = createSelector(\r\n () => {\r\n return PILE_SHAPE_CATEGORIES.map((c, idx) => {\r\n return {\r\n Text : c,\r\n // These constant values on the server used by the calculator\r\n // are zero indexed, so do not modify the value\r\n Value : idx,\r\n }\r\n })\r\n }\r\n)\r\n\r\n/**\r\n * Translated from the PileConstants.java in the PilesCalculator source.\r\n * The order of values in this array is intentional to match the\r\n * constant values on the server used by the calculator.\r\n */\r\nconst HAND_PILE_SPECIES = [\r\n 'Conifer',\r\n 'Shrub',\r\n]\r\nconst handPileSpecies = createSelector(\r\n () => {\r\n return HAND_PILE_SPECIES.map((c, idx) => {\r\n return {\r\n Text : c,\r\n // Must increment by one to match the expect\r\n // constant value on the server used by the calculator\r\n Value : idx + 1,\r\n }\r\n })\r\n }\r\n)\r\n\r\n/**\r\n * Translated from the PileConstants.java in the PilesCalculator source.\r\n * The order of values in this array is intentional to match the\r\n * constant values on the server used by the calculator.\r\n */\r\nconst PILE_TYPE = [\r\n 'Hand',\r\n 'Machine',\r\n]\r\nconst pileTypes = createSelector(\r\n () => {\r\n return PILE_TYPE.map((c, idx) => {\r\n return {\r\n Text : c,\r\n // Must increment by one to match the expect\r\n // constant value on the server used by the calculator\r\n Value : idx + 1,\r\n }\r\n })\r\n }\r\n)\r\n\r\n/**\r\n * Translated from the PileConstants.java in the PilesCalculator source.\r\n * The order of values in this array is intentional to match the\r\n * constant values on the server used by the calculator.\r\n */\r\nconst PILE_QUALITY = [\r\n 'Clean (0%)',\r\n 'Dirty (0 - 10%)',\r\n 'Very Dirty (>10%)',\r\n]\r\nconst pileQuality = createSelector(\r\n () => {\r\n return PILE_QUALITY.map((c, idx) => {\r\n return {\r\n Text : c,\r\n // Must increment by one to match the expect\r\n // constant value on the server used by the calculator\r\n Value : idx + 1,\r\n }\r\n })\r\n }\r\n)\r\n\r\n/**\r\n * Translated from the PileConstants.java in the PilesCalculator source.\r\n * The order of values in this array is intentional to match the\r\n * constant values on the server used by the calculator.\r\n */\r\nconst PACKING_RATIO = {\r\n 10 : '10%: Mostly long-needled pines and/or broadleaf deciduous litter. Fuel diameters < 10 inches.',\r\n 20 : '20%: Mostly short-needled conifers. Fuel diameters < 10 inches.',\r\n 25 : '25%: Highly compacted, clean piles. Log diameters > 10 inches.',\r\n}\r\nconst packingRatio = createSelector(\r\n () => {\r\n return Object.entries(PACKING_RATIO).map(c => {\r\n return {\r\n Text : c[1],\r\n Value : c[0],\r\n }\r\n })\r\n }\r\n)\r\n\r\n\r\nconst speciesWoodDensities = ormSelector(\r\n ({ SpeciesWoodDensity, }) => {\r\n return SpeciesWoodDensity.all().toRefArray().map(s => {\r\n return {\r\n Text : `${s.CommonName} (${s.Density})`,\r\n Value : s.SpeciesWoodDensityId,\r\n }\r\n })\r\n }\r\n)\r\n\r\n\r\nconst pileTypeIsChecked = ormSelector(\r\n activeBurnPermitIdSelector,\r\n ({ BurnPermitPileGroup, BurnPermit, }, BurnPermitId) => {\r\n const pileGroups = BurnPermitPileGroup.filter({ BurnPermitId, })\r\n let permit\r\n if (pileGroups.length) {\r\n permit = pileGroups.first().BurnPermit\r\n }\r\n else {\r\n permit = BurnPermit.withId(BurnPermitId)\r\n }\r\n if (!permit || !permit.BurnPermitArea) {\r\n return false\r\n }\r\n return permit.BurnPermitArea.BurnTypes.toRefArray().some(t => t.BurnTypeName === 'Pile')\r\n }\r\n)\r\n\r\n\r\nexport const lookupDataSelector = createSelector(\r\n pileShapeCategories,\r\n handPileSpecies,\r\n pileTypes,\r\n pileQuality,\r\n packingRatio,\r\n speciesWoodDensities,\r\n (PileShapes, HandPileSpecies, PileTypes, PileQuality, PackingRatios, SpeciesWoodDensities) => {\r\n return {\r\n PileShapes,\r\n HandPileSpecies,\r\n PileTypes,\r\n PileQuality,\r\n PackingRatios,\r\n SpeciesWoodDensities,\r\n }\r\n }\r\n)\r\n\r\n\r\nconst pileGroupInputMapper = (g, idx) => {\r\n const groupNamePrefix = g.PileType ? `${PILE_TYPE[g.PileType - 1]} ` : ''\r\n return {\r\n BurnPermitPileGroupId : g.BurnPermitPileGroupId,\r\n BurnPermitId : g.BurnPermitId || '',\r\n PileCount : g.PileCount || '',\r\n PileType : g.PileType || '',\r\n PileTypeName : PILE_TYPE[g.PileType - 1] || '',\r\n PileShape : Number.isInteger(g.PileShape) ? g.PileShape : '',\r\n PileShapeName : PILE_SHAPE_CATEGORIES[g.PileShape] || '',\r\n PileGroupName : g.PileGroupName || `${groupNamePrefix}Pile Group ${g.BurnPermitId}-${idx + 1}`,\r\n WidthOne : g.WidthOne || '',\r\n HeightOne : g.HeightOne || '',\r\n LengthOne : g.LengthOne || '',\r\n WidthTwo : g.WidthTwo || '',\r\n HeightTwo : g.HeightTwo || '',\r\n LengthTwo : g.LengthTwo || '',\r\n PileQuality : g.PileQuality || '',\r\n PileQualityName : PILE_QUALITY[g.PileQuality - 1] || '',\r\n PercentSoil : g.PercentSoil || '',\r\n PackingRatio : g.PackingRatio || '',\r\n PackingRatioName : PACKING_RATIO[g.PackingRatio] || '',\r\n HandPileSpecies : g.HandPileSpecies || '',\r\n HandPileSpeciesName : HAND_PILE_SPECIES[g.HandPileSpecies - 1] || '',\r\n SpeciesOneDensityId : g.SpeciesOneDensityId || '',\r\n SpeciesOneDensity : g.SpeciesOneDensity ? g.SpeciesOneDensity.toString() : '',\r\n SpeciesOneCompositionPercent : g.SpeciesOneCompositionPercent || 0, // Default to 0%\r\n SpeciesTwoDensityId : g.SpeciesTwoDensityId || '',\r\n SpeciesTwoDensity : g.SpeciesTwoDensity ? g.SpeciesTwoDensity.toString() : '',\r\n SpeciesTwoCompositionPercent : g.SpeciesTwoCompositionPercent || 0, // Default to 0%\r\n TotalCompositionPercent : parseFloat(g.SpeciesOneCompositionPercent || 0.0) + parseFloat(g.SpeciesTwoCompositionPercent || 0.0),\r\n CreateBy : g.CreateBy,\r\n CreateDate : g.CreateDate,\r\n UpdateBy : g.UpdateBy,\r\n UpdateDate : g.UpdateDate,\r\n IsLocal : g.IsLocal || false,\r\n }\r\n}\r\n\r\n\r\nconst calculatorResultsMapper = g => {\r\n return {\r\n BurnPermitPileGroupId : g.BurnPermitPileGroupId,\r\n BurnPermitId : g.BurnPermitId || '',\r\n GeometricVolume : g.GeometricVolume || '',\r\n TrueWoodVolume : g.TrueWoodVolume || '',\r\n PileBiomass : g.PileBiomass || '',\r\n ConsumedFuel : g.ConsumedFuel || '',\r\n Pm : g.Pm || '',\r\n Pm25 : g.Pm25 || '',\r\n Pm10 : g.Pm10 || '',\r\n Co : g.Co || '',\r\n Co2 : g.Co2 || '',\r\n Ch4 : g.Ch4 || '',\r\n Nmhc : g.Nmhc || '',\r\n LegacyTonnage : g.LegacyTonnage || '',\r\n CreateBy : g.CreateBy,\r\n CreateDate : g.CreateDate,\r\n UpdateBy : g.UpdateBy,\r\n UpdateDate : g.UpdateDate,\r\n }\r\n}\r\n\r\n\r\nexport const pileGroupsByPermitId = ormByIdSelector(\r\n activeBurnPermitIdSelector,\r\n ({ BurnPermitPileGroup, }, BurnPermitId) => {\r\n if (BurnPermitId === null || isNaN(BurnPermitId)) {\r\n return []\r\n }\r\n return BurnPermitPileGroup.filter({ BurnPermitId, }).toModelArray()\r\n }\r\n)\r\n\r\n\r\n\r\nexport const burnPermitPileGroupsByPermitIdSelector = createSelector(\r\n pileGroupsByPermitId,\r\n networkStateSelector,\r\n pileGroupState,\r\n pileTypeIsChecked,\r\n burnPermitAreaByIdSelector,\r\n permitCanAcceptDocumentUploads,\r\n (pileGroups, Network, PileGroupState, PileBurnTypeIsChecked, PermitArea, canUpload) => {\r\n const state = {\r\n RequestFailed : PileGroupState.RequestFailed,\r\n Validate : PileGroupState.Validate,\r\n online : Network.online,\r\n ActiveBurnPermitPileGroup : {},\r\n BurnPermitPileGroups : [],\r\n CalculatorResults : [],\r\n PileBurnTypeIsChecked,\r\n canUpload,\r\n isValid : false,\r\n groupsAreValid : false,\r\n needsPileGroups : false,\r\n needsCalculation : true,\r\n isExemptArea : PermitArea && (!Number.isNaN(PermitArea.HarvestAcres) && PermitArea.HarvestAcres < 10) && Array.isArray(PermitArea.BurnTypes) && PermitArea.BurnTypes.length === 1 && PermitArea.BurnTypes[0] === 1,\r\n }\r\n\r\n if (Array.isArray(pileGroups) && pileGroups.length > 0) {\r\n state.BurnPermitPileGroups = pileGroups.map(pileGroupInputMapper)\r\n }\r\n\r\n if (Number.isInteger(PileGroupState.EditBurnPermitPileGroupId)) {\r\n const group = state.BurnPermitPileGroups.filter(g => g.BurnPermitPileGroupId === PileGroupState.EditBurnPermitPileGroupId)[0] || {}\r\n state.ActiveBurnPermitPileGroup = group\r\n }\r\n\r\n state.CalculatorResults = pileGroups.map(calculatorResultsMapper)\r\n state.TonnageIsEstimated = state.CalculatorResults.length > 0 && state.CalculatorResults.every(r => r.PileBiomass > 0.0)\r\n\r\n // Pile Calculations are not needed if the application is exempt (meaning under 10 acres for a pile burn)\r\n // or the application does not have the Pile Type selected\r\n if (\r\n (state.isExemptArea && state.BurnPermitPileGroups.length === 0)\r\n || (PileBurnTypeIsChecked === false)\r\n ) {\r\n state.needsCalculation = false\r\n } else {\r\n state.needsPileGroups = Array.isArray(state.BurnPermitPileGroups) === false || state.BurnPermitPileGroups.length === 0\r\n state.needsCalculation = !state.TonnageIsEstimated\r\n }\r\n\r\n state.isValid = !state.needsCalculation\r\n state.groupsAreValid = state.BurnPermitPileGroups\r\n .map(g => {\r\n if (g.BurnPermitPileGroupId === PileGroupState.EditBurnPermitPileGroupId) {\r\n return g\r\n }\r\n const entries = Object.entries(g)\r\n for (let i = 0, len = entries.length; i < len; i++) {\r\n const key = entries[i][0], value = entries[i][1]\r\n if (value === '') {\r\n g[key] = null\r\n }\r\n }\r\n return g\r\n })\r\n .map(g => BURN_PERMIT_PILE_GROUP_VALIDATION_SCHEMA.isValidSync(g), [])\r\n return { ...state, }\r\n }\r\n)\r\n","/**\r\n * @typedef {object} FileComparison\r\n * @property {Array} files1 Array of file names\r\n * @property {Array} files2 Array of file names\r\n */\r\n\r\n/**\r\n * @typedef {object} FileComparisonResult\r\n * @property {string} errMessage An error\r\n * @property {Array} repeatingNames Array of file names that exist in both input arrays\r\n */\r\n\r\n/**\r\n * Compares the arrays of filenames to ensure only unique file names are provided\r\n * @param {FileComparison} fileComparison Arrays of file names\r\n * @returns {FileComparisonResult}\r\n */\r\nexport function compareFileNames ({ files1, files2, }) {\r\n const fileNamesToUpload = files1.map(f => f.name)\r\n const uniqueFileNamesToUpload = [ ...new Set(files1.map(f => f.name)), ]\r\n let repeatingNames = []\r\n if (uniqueFileNamesToUpload.length !== files1.length) {\r\n // get file name(s) that are repeating\r\n repeatingNames = fileNamesToUpload.filter((n, _, arr) => {\r\n return arr.filter(v => v === n).length > 1\r\n })\r\n }\r\n // compare uniqueFileNamesToUpload to the currentFilesNames\r\n const currentFilesNames = files2.map(f => f.DocumentName)\r\n if (currentFilesNames.some(n => uniqueFileNamesToUpload.includes(n))) {\r\n // get file name(s) that are repeating\r\n repeatingNames = [ ...currentFilesNames, ...uniqueFileNamesToUpload, ]\r\n .filter((n, _, arr) => {\r\n return arr.filter(v => v === n).length > 1\r\n })\r\n }\r\n // Only return a unique set of the repeating file names\r\n repeatingNames = [ ...new Set(repeatingNames), ]\r\n let errMessage = []\r\n if (repeatingNames.length) {\r\n errMessage = [\r\n 'One or more documents you are attempting to upload has the same name as an existing document.',\r\n 'Document names must be unique.',\r\n ]\r\n }\r\n return { errMessage, repeatingNames, }\r\n}\r\n","// Libraries\r\nimport { isEmpty, } from 'lodash'\r\nimport { all, put, select, call, fork, takeLatest, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { hideLoading, showLoading, } from './AppSagas'\r\nimport { uploadFiles, } from './FileSagas'\r\nimport { doFetch, getLookupData, showError, extractPayload, } from './ApiSagas'\r\nimport { getBurnPermit, getPermitFiles, updateTonnageAndFee, } from './BurnPermitSagas'\r\nimport {\r\n updateLocalModel,\r\n upsertLocalModel,\r\n upsertLocalModels,\r\n createLocalModel,\r\n destroyLocalModels,\r\n destroyLocalModel,\r\n replaceAll,\r\n} from './OrmSagas'\r\n\r\n// Reducers\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { UiTypes, } from '../redux/UiRedux'\r\nimport { BurnPermitFormTypes, } from '../redux/BurnPermitFormRedux'\r\nimport { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\r\nimport BurnPermitPileGroupActions, { BurnPermitPileGroupTypes, } from '../redux/BurnPermitPileGroupRedux'\r\n\r\n// Selectors\r\nimport { networkStateSelector, } from '../selectors/selectors'\r\nimport { modelByIdSelector, } from '../selectors/modelSelectors'\r\nimport {\r\n burnPermitPileGroupsByPermitIdSelector,\r\n pileGroupsByPermitId,\r\n pileGroupById,\r\n activePileGroupId,\r\n} from '../selectors/burnPermitPileGroupsSelectors'\r\nimport { activeBurnPermitIdSelector, permitApplicationDocuments, } from '../selectors/burnPermitSelectors'\r\n\r\n// Models\r\nimport BurnPermitPileGroup from '../models/BurnPermitPileGroup'\r\n\r\n// Utilities\r\nimport { compareFileNames, } from '../utilities/files'\r\n\r\n// Constants\r\nconst BURN_PERMIT_PILE_GROUP_ENDPOINT = BurnPermitPileGroup.endpoint()\r\nconst BURN_PERMIT_PILE_GROUP_MODEL_NAME = BurnPermitPileGroup.modelName\r\n\r\n\r\nexport function* getBurnPileGroup ({ BurnPermitPileGroupId, }) {\r\n try {\r\n\r\n if (isNaN(parseInt(BurnPermitPileGroupId))) {\r\n yield call(showError, 'You must supply a valid Burn Permit Pile Group ID.')\r\n return\r\n }\r\n\r\n yield fork(getLookupData, { modelName: 'BurnType', })\r\n yield fork(getLookupData, { modelName: 'SpeciesWoodDensity', })\r\n\r\n const burnPermPileResp = yield call(doFetch, `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/${BurnPermitPileGroupId}`)\r\n\r\n if (burnPermPileResp.ok !== true) {\r\n yield call(showError, `An error occurred requesting Burn Permit Pile info for ID ${BurnPermitPileGroupId}`)\r\n return\r\n }\r\n\r\n yield call(upsertLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, burnPermPileResp.responseBody)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nexport function* getBurnPileGroups ({ burnPermitId, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online) {\r\n return\r\n }\r\n\r\n if (isNaN(parseInt(burnPermitId))) {\r\n yield call(showError, 'You must supply a valid Burn Permit ID.')\r\n return\r\n }\r\n\r\n yield fork(getLookupData, { modelName: 'BurnType', })\r\n yield fork(getLookupData, { modelName: 'SpeciesWoodDensity', })\r\n\r\n const burnPermPileResp = yield call(doFetch, `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/ForPermit/${burnPermitId}`)\r\n if (burnPermPileResp.ok !== true) {\r\n yield call(showError, `An error occurred requesting Burn Permit Pile Groups for Permit ID ${burnPermitId}`)\r\n return\r\n }\r\n yield call(replaceAll, BURN_PERMIT_PILE_GROUP_MODEL_NAME, burnPermPileResp.responseBody, { BurnPermitId: burnPermitId, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nexport function* downloadPileInfo () {\r\n try {\r\n const downloadResp = yield call(doFetch, `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/Download`)\r\n\r\n if (downloadResp.ok !== true) {\r\n yield call(showError, 'An error occurred downloading Burn Permit Pile Group info')\r\n return\r\n }\r\n\r\n yield call(upsertLocalModels, BURN_PERMIT_PILE_GROUP_MODEL_NAME, downloadResp.responseBody)\r\n \r\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'PileInfo', status: true, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* createBurnPermitPileGroup ({ BurnPermitPileGroup, }) {\r\n const { online, } = yield select(networkStateSelector)\r\n if (BurnPermitPileGroup) {\r\n if (!online) {\r\n const { BurnPermitPileGroupId, } = BurnPermitPileGroup\r\n \r\n yield call(upsertLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, BurnPermitPileGroup)\r\n\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : BurnPermitPileGroupTypes.CREATE_BURN_PERMIT_PILE_GROUP_REQUEST,\r\n url : BURN_PERMIT_PILE_GROUP_ENDPOINT,\r\n method : 'POST',\r\n keyName : BurnPermitPileGroup.idAttribute,\r\n keyValue : BurnPermitPileGroupId,\r\n })\r\n \r\n yield put(BurnPermitPileGroupActions.editBurnPermitPileGroup())\r\n }\r\n else {\r\n yield put({ type: AppTypes.SHOW_LOADING, })\r\n }\r\n yield put(BurnPermitPileGroupActions.createBurnPermitPileGroupRequest(BurnPermitPileGroup, online))\r\n }\r\n}\r\n\r\nfunction* updateBurnPermitPileGroup ({ BurnPermitPileGroup, }) {\r\n const { online, } = yield select(networkStateSelector)\r\n const { BurnPermitPileGroupId, } = BurnPermitPileGroup\r\n const localBurnPermitPileGroup = yield select(modelByIdSelector, { modelName: BURN_PERMIT_PILE_GROUP_MODEL_NAME, modelId: BurnPermitPileGroupId, })\r\n \r\n if (localBurnPermitPileGroup && !localBurnPermitPileGroup.IsLocal) {\r\n if (!online) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : BurnPermitPileGroupTypes.UPDATE_BURN_PERMIT_PILE_GROUP_REQUEST,\r\n url : `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/${BurnPermitPileGroupId}`,\r\n method : 'PUT',\r\n keyName : BurnPermitPileGroup.idAttribute,\r\n keyValue : BurnPermitPileGroupId,\r\n })\r\n }\r\n else {\r\n yield put({ type: AppTypes.SHOW_LOADING, })\r\n }\r\n yield put(BurnPermitPileGroupActions.updateBurnPermitPileGroupRequest(BurnPermitPileGroup, online))\r\n }\r\n \r\n if (!online) {\r\n const model = { ...BurnPermitPileGroup, Submit: true, }\r\n yield call(updateLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, BurnPermitPileGroupId, model)\r\n }\r\n}\r\n\r\nfunction* updateBurnPermitPileGroupSuccess (resp) {\r\n try {\r\n const pileGroup = yield call(extractPayload, resp)\r\n // Clear out any local only groups\r\n yield put({ type: BurnPermitPileGroupTypes.DELETE_LOCAL_PILE_GROUPS, })\r\n \r\n let burnPermitId\r\n if (Array.isArray(pileGroup)) {\r\n yield call(upsertLocalModels, BURN_PERMIT_PILE_GROUP_MODEL_NAME, pileGroup)\r\n burnPermitId = pileGroup.map(g => g.BurnPermitId)[0]\r\n }\r\n else {\r\n yield call(upsertLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, pileGroup)\r\n burnPermitId = pileGroup.BurnPermitId\r\n }\r\n \r\n yield put({ type: BurnPermitPileGroupTypes.EDIT_BURN_PERMIT_PILE_GROUP, })\r\n \r\n const validationInfo = yield select(burnPermitPileGroupsByPermitIdSelector, burnPermitId)\r\n if (validationInfo.isValid) {\r\n yield put({ type: BurnPermitFormTypes.COMPLETED_STEPS, StepIds: [ 5, ], })\r\n }\r\n\r\n if (resp.showSuccess) {\r\n // call get burn permit so the tonnage and fee update\r\n if (burnPermitId) {\r\n yield call(getBurnPermit, { burnPermitId, })\r\n yield fork(getPermitFiles, { permitId: burnPermitId, })\r\n }\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put({ type: AppTypes.HIDE_LOADING, })\r\n }\r\n}\r\n\r\nexport function* submitOfflinePileEdits (localPermitId, serverPermitId) {\r\n try {\r\n // Get the local pile model\r\n const pileGroups = yield select(pileGroupsByPermitId, localPermitId)\r\n if (pileGroups.every(g => g.Submit)) {\r\n const body = pileGroups.map(g => {\r\n return {\r\n ...g._fields,\r\n BurnPermitPileGroupId : 0,\r\n BurnPermitId : serverPermitId,\r\n }\r\n })\r\n // Update them\r\n const pileResp = yield call(doFetch, BURN_PERMIT_PILE_GROUP_ENDPOINT, { method: 'POST', body, })\r\n if (pileResp.ok) {\r\n yield fork(updateBurnPermitPileGroupSuccess, { payload: pileResp.responseBody, modelName: BURN_PERMIT_PILE_GROUP_MODEL_NAME, })\r\n return\r\n }\r\n yield call(showError, pileResp.responseBody)\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nexport function* estimateConsumedTonnage ({ burnPermitId, }, ) {\r\n try {\r\n yield put({ type: AppTypes.SHOW_LOADING, })\r\n const resp = yield call(doFetch, `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/EstimateConsumedTonnage/${burnPermitId}`)\r\n if (!resp.ok) {\r\n yield call(showError, resp.responseBody ? resp.responseBody.error : '')\r\n return\r\n }\r\n yield call(upsertLocalModels, BURN_PERMIT_PILE_GROUP_MODEL_NAME, resp.responseBody)\r\n yield call(getPermitFiles, { permitId: burnPermitId, })\r\n yield fork(updateTonnageAndFee)\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put({ type: AppTypes.HIDE_LOADING, })\r\n }\r\n}\r\n\r\n\r\nfunction* addLocalPileGroup () {\r\n const burnPermitId = yield select(activeBurnPermitIdSelector)\r\n const { BurnPermitPileGroupId, } = yield call(createLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, { BurnPermitId: burnPermitId, })\r\n yield put({ type: BurnPermitPileGroupTypes.EDIT_BURN_PERMIT_PILE_GROUP, BurnPermitPileGroupId, })\r\n}\r\n\r\n\r\nfunction* deletePileGroup ({ BurnPermitPileGroupId, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!Number.isInteger(parseInt(BurnPermitPileGroupId))) {\r\n BurnPermitPileGroupId = yield select(activePileGroupId)\r\n }\r\n const pileGroup = yield select(pileGroupById, BurnPermitPileGroupId)\r\n if (!pileGroup.IsLocal) {\r\n if (online) {\r\n yield put({ type: AppTypes.SHOW_LOADING, })\r\n }\r\n yield put(BurnPermitPileGroupActions.deleteBurnPermitPileGroupRequest(BurnPermitPileGroupId, pileGroup.BurnPermitId))\r\n }\r\n else {\r\n yield call(destroyLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, BurnPermitPileGroupId)\r\n }\r\n if (!online) {\r\n yield call(destroyLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, pileGroup.BurnPermitPileGroupId)\r\n if (pileGroup.IsLocal) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : BurnPermitPileGroupTypes.CREATE_BURN_PERMIT_PILE_GROUP_REQUEST,\r\n url : BURN_PERMIT_PILE_GROUP_ENDPOINT,\r\n method : 'POST',\r\n keyName : BurnPermitPileGroup.options.idAttribute,\r\n keyValue : BurnPermitPileGroupId,\r\n })\r\n }\r\n }\r\n yield put({ type: UiTypes.CLOSE_MODAL, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nfunction* deleteLocalPileGroups () {\r\n yield call(destroyLocalModels, BURN_PERMIT_PILE_GROUP_MODEL_NAME, { IsLocal: true, })\r\n}\r\n\r\nfunction* deleteBurnPermitPileGroupSuccess (resp) {\r\n try {\r\n const success = yield call(extractPayload, resp)\r\n let BurnPermitId\r\n if (success) {\r\n yield put({ type: BurnPermitPileGroupTypes.EDIT_BURN_PERMIT_PILE_GROUP, })\r\n const localPileGroup = yield select(pileGroupById, resp.BurnPermitPileGroupId)\r\n BurnPermitId = localPileGroup.BurnPermitId\r\n yield call(destroyLocalModel, BURN_PERMIT_PILE_GROUP_MODEL_NAME, resp.BurnPermitPileGroupId)\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n \r\n const validationInfo = yield select(burnPermitPileGroupsByPermitIdSelector, BurnPermitId)\r\n if (validationInfo.isValid) {\r\n yield put({ type: BurnPermitFormTypes.COMPLETED_STEPS, StepIds: [ 5, ], })\r\n }\r\n yield call(updateTonnageAndFee)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put({ type: AppTypes.HIDE_LOADING, })\r\n }\r\n}\r\n\r\nfunction* requestFailed (resp) {\r\n try {\r\n if (!resp.payload) {\r\n return\r\n }\r\n const payload = yield call(extractPayload, resp)\r\n if (!payload) {\r\n return\r\n }\r\n let error = payload.error\r\n if (Array.isArray(payload.errors)) {\r\n error = payload.errors.join('\\n\\n')\r\n }\r\n else if (payload.errors !== null && typeof payload.errors === 'object' && !isEmpty(payload.errors)) {\r\n error = [ ...Object.values(payload.errors), ].join('\\n\\n')\r\n }\r\n yield call(showError, error)\r\n // Toggle off the state flag\r\n yield put({ type: BurnPermitPileGroupTypes.PILE_GROUP_REQUEST_FAILED, failed: false, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put({ type: AppTypes.HIDE_LOADING, })\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} BatchPileUpload\r\n * @property {number} permitId The PermitId to upload the batch pile files to\r\n * @property {Array} files An array of file names used to locate the users files of batch piles\r\n */\r\n\r\n/**\r\n * Uploads one or more files to create a batch of piles from and calculate tonnage and emmissions\r\n * @param {BatchPileUpload} BatchPileUpload The PermitId and array of filenames to upload a batch of pile groups\r\n * @returns\r\n */\r\nexport function* uploadBatchPiles ({ permitId, files, }) {\r\n let receivedPiles = false\r\n try {\r\n yield call(showLoading)\r\n\r\n if (!permitId) {\r\n yield call(showError, 'You must supply a permitId to upload a Batch File of Pile Groups.')\r\n return\r\n }\r\n\r\n const currentFiles = yield select(permitApplicationDocuments, permitId)\r\n if (currentFiles.length) {\r\n const { errMessage, repeatingNames, } = yield call(compareFileNames, { files1: files, files2: currentFiles, })\r\n if (errMessage.length || repeatingNames.length) {\r\n yield call(showError, errMessage.join('\\n\\n'))\r\n return\r\n }\r\n }\r\n\r\n const url = `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/BatchUpload/${permitId}`\r\n const resp = yield call(uploadFiles, { url, files, })\r\n\r\n const { responseBody, ok, } = resp\r\n if (ok !== true) {\r\n let error = 'An error occurred uploading the batch pile file to the Permit Application'\r\n if (responseBody && responseBody.error) {\r\n error = responseBody.error\r\n }\r\n yield call(showError, error)\r\n return\r\n }\r\n receivedPiles = ok\r\n\r\n yield call(upsertLocalModels, BURN_PERMIT_PILE_GROUP_MODEL_NAME, responseBody)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n const sagas = [\r\n call(hideLoading),\r\n put({ type: UiTypes.CLOSE_MODAL, }),\r\n call(getBurnPermit, { burnPermitId: permitId, updateFee: true, }),\r\n call(getPermitFiles, { permitId, }),\r\n ]\r\n // If we didn't get piles back, call to get them just in case\r\n // they were made and something else failed in the server side\r\n // process that caused them to not be returned\r\n if (receivedPiles !== true) {\r\n sagas.push(call(getBurnPileGroups, { burnPermitId: permitId, }))\r\n }\r\n yield all(sagas)\r\n }\r\n}\r\n\r\nexport function* deleteAllBurnPileGroups ({ permitId, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online) {\r\n return\r\n }\r\n\r\n if (isNaN(parseInt(permitId))) {\r\n yield call(showError, 'You must supply a valid Burn Permit ID to delete all Pile Groups.')\r\n return\r\n }\r\n\r\n const burnPermPileResp = yield call(doFetch, `${BURN_PERMIT_PILE_GROUP_ENDPOINT}/ForPermit/${permitId}`, { method: 'DELETE', })\r\n if (burnPermPileResp.ok !== true) {\r\n yield call(showError, `An error occurred deleting all Burn Permit Pile Groups for Permit ID ${permitId}`)\r\n return\r\n }\r\n yield all([\r\n call(replaceAll, BURN_PERMIT_PILE_GROUP_MODEL_NAME, [], { BurnPermitId: permitId, }),\r\n put({ type: UiTypes.CLOSE_MODAL, }),\r\n ])\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nexport const BurnPermitPileGroupSagas = [\r\n takeLatest(BurnPermitPileGroupTypes.GET_BURN_PILE_GROUP, getBurnPileGroup),\r\n takeLatest(BurnPermitPileGroupTypes.GET_BURN_PILE_GROUPS, getBurnPileGroups),\r\n takeLatest(BurnPermitPileGroupTypes.CREATE_BURN_PERMIT_PILE_GROUP, createBurnPermitPileGroup),\r\n takeLatest(BurnPermitPileGroupTypes.UPDATE_BURN_PERMIT_PILE_GROUP, updateBurnPermitPileGroup),\r\n takeLatest(BurnPermitPileGroupTypes.UPDATE_BURN_PERMIT_PILE_GROUP_SUCCESS, updateBurnPermitPileGroupSuccess),\r\n takeLatest(BurnPermitPileGroupTypes.ESTIMATE_CONSUMED_TONNAGE, estimateConsumedTonnage),\r\n takeLatest(BurnPermitPileGroupTypes.ADD_LOCAL_PILE_GROUP, addLocalPileGroup),\r\n takeLatest(BurnPermitPileGroupTypes.DELETE_PILE_GROUP, deletePileGroup),\r\n takeLatest(BurnPermitPileGroupTypes.DELETE_LOCAL_PILE_GROUPS, deleteLocalPileGroups),\r\n takeLatest(BurnPermitPileGroupTypes.DELETE_BURN_PERMIT_PILE_GROUP_SUCCESS, deleteBurnPermitPileGroupSuccess),\r\n takeLatest(BurnPermitPileGroupTypes.PILE_GROUP_REQUEST_FAILED, requestFailed),\r\n takeLatest(BurnPermitPileGroupTypes.UPLOAD_BATCH_PILES, uploadBatchPiles),\r\n takeLatest(BurnPermitPileGroupTypes.DELETE_ALL_PILE_GROUPS, deleteAllBurnPileGroups),\r\n]","import { createSelector, } from 'reselect'\r\nimport { parseContentStateValue, } from '../utilities'\r\n\r\nimport { ormSelector, ormWithPropSelector, ormByIdSelector, } from './selectors'\r\n\r\nexport const conditionStateSelector = state => state.PermitConditions\r\n\r\nexport const conditionErrorsSelector = createSelector(\r\n conditionStateSelector,\r\n state => state ? state.conditionErrors : null\r\n)\r\n\r\nexport const activePermitIdSelector = createSelector(\r\n conditionStateSelector,\r\n state => state ? state.burnPermitId : ''\r\n)\r\n\r\n/**\r\n * Map the ORM condition value data to something the UI can handle.\r\n */\r\nexport const conditionValuesNewForBurnPermitSelector = ormSelector(\r\n activePermitIdSelector,\r\n ({ BurnPermit, BurnPermitConditionXref, }, BurnPermitId) => {\r\n if (!BurnPermitId) {\r\n return {}\r\n }\r\n\r\n let conditionXrefs = []\r\n // Try to get the data through the Permit model\r\n if (BurnPermit.idExists(BurnPermitId)) {\r\n conditionXrefs = BurnPermit.withId(BurnPermitId).BurnPermitConditionXrefs.all().toModelArray()\r\n }\r\n // But provide a fallback in case for some reason the user goes straight to the Conditions\r\n // page without ever visiting another page that would've requested the permit\r\n else if (BurnPermitConditionXref.filter({ BurnPermitId, }).exists()) {\r\n conditionXrefs = BurnPermitConditionXref.filter({ BurnPermitId, }).toModelArray()\r\n }\r\n\r\n if (!conditionXrefs || (conditionXrefs.length === 0)) {\r\n return {}\r\n }\r\n\r\n let valueObj = {}\r\n conditionXrefs.forEach((x) => {\r\n if (!x.BurnPermitCondition) {\r\n return\r\n }\r\n const condition = x.BurnPermitCondition\r\n if (!condition) {\r\n return\r\n }\r\n\r\n const { BurnPermitConditionName, } = condition\r\n\r\n switch (BurnPermitConditionName) {\r\n case 'Wind direction':\r\n if (x.BurnPermitWindDirectionConditions.exists()) {\r\n valueObj[x.BurnPermitConditionId] = x.BurnPermitWindDirectionConditions.toRefArray().map(x => x.DirectionId)\r\n } else {\r\n valueObj[x.BurnPermitConditionId] = []\r\n }\r\n break\r\n case 'Days of the week':\r\n if (x.BurnPermitProhibitedDayConditions.exists()) {\r\n valueObj[x.BurnPermitConditionId] = x.BurnPermitProhibitedDayConditions.toRefArray().map(x => x.DayOfWeekId)\r\n } else {\r\n valueObj[x.BurnPermitConditionId] = []\r\n }\r\n break\r\n case 'Equipment requirements':\r\n if (x.BurnPermitEquipmentConditions.exists()) {\r\n valueObj[x.BurnPermitConditionId] = x.BurnPermitEquipmentConditions.toRefArray().map(x => x.EquipmentTypeId)\r\n const otherDesc = x.BurnPermitEquipmentConditionXrefs.toRefArray().filter(x => x.OtherDescription).map(x => x.OtherDescription)[0]\r\n if (otherDesc) {\r\n valueObj[x.BurnPermitConditionId].push(otherDesc)\r\n }\r\n } else {\r\n valueObj[x.BurnPermitConditionId] = []\r\n }\r\n break\r\n case 'Other conditions':\r\n if (x.OtherConditionFormatted) {\r\n valueObj[x.BurnPermitConditionId] = parseContentStateValue(x.OtherConditionFormatted)\r\n } else {\r\n valueObj[x.BurnPermitConditionId] = parseContentStateValue(x.OtherCondition)\r\n }\r\n break\r\n case 'Required contact':\r\n // do nothing - this one is handled elsewhere\r\n break\r\n default:\r\n valueObj[x.BurnPermitConditionId] = true\r\n Object.keys(x._fields).forEach(key => {\r\n if (!key.startsWith('Create') && !key.startsWith('Update') && !key.endsWith('Id') && x[key]) {\r\n valueObj[x.BurnPermitConditionId] = x[key]\r\n }\r\n })\r\n break\r\n }\r\n })\r\n return valueObj\r\n }\r\n)\r\nconst conditionsSelector = ormSelector(\r\n ({ BurnPermitCondition, }) => {\r\n if (!BurnPermitCondition) {\r\n return []\r\n }\r\n const query = BurnPermitCondition.all()\r\n if (!query.exists()) {\r\n return []\r\n }\r\n return query.filter(c => c.BurnPermitConditionName !== 'Required contact').orderBy('BurnPermitConditionId').toModelArray()\r\n }\r\n)\r\n\r\nexport const contactConditionSelector = ormSelector(\r\n ({ BurnPermitCondition, }) => {\r\n if (!BurnPermitCondition) {\r\n return null\r\n }\r\n const query = BurnPermitCondition.all()\r\n if (!query.exists()) {\r\n return null\r\n }\r\n return query.filter(c => c.BurnPermitConditionName === 'Required contact').first()\r\n }\r\n)\r\n\r\nconst mapContactCondition = (contact) => {\r\n if (!contact) {\r\n return {\r\n ContactName : '',\r\n PhoneNumber : '',\r\n PhoneExt : '',\r\n BurnPermitRequiredContactConditionId : -1,\r\n }\r\n }\r\n return {\r\n ContactName : contact.ContactName || '',\r\n PhoneNumber : contact.PhoneNumber || '',\r\n PhoneExt : contact.PhoneExt || '',\r\n BurnPermitRequiredContactConditionId : contact.BurnPermitRequiredContactConditionId || -1,\r\n }\r\n}\r\n\r\nconst mapContactConditionForFormik = (contacts) => {\r\n if (!contacts || !Array.isArray(contacts)) {\r\n return {\r\n Contacts: [],\r\n }\r\n }\r\n return {\r\n Contacts: contacts.map(mapContactCondition),\r\n }\r\n}\r\n\r\nexport const contactConditionXrefForPermitSelector = ormByIdSelector(\r\n contactConditionSelector,\r\n ({ BurnPermitConditionXref, }, burnPermitId, contactCondition) => {\r\n if (!BurnPermitConditionXref || !contactCondition) {\r\n return null\r\n }\r\n const query = BurnPermitConditionXref.filter(x =>\r\n x.BurnPermitConditionId === contactCondition.BurnPermitConditionId\r\n && x.BurnPermitId === burnPermitId)\r\n\r\n if (!query.exists()) {\r\n return null\r\n }\r\n return query.first()\r\n }\r\n)\r\n \r\n\r\nexport const contactConditionForPermitSelector = ormByIdSelector(\r\n contactConditionSelector,\r\n ({ BurnPermitCondition, BurnPermitConditionXref, BurnPermitRequiredContactCondition, }, burnPermitId, contactCondition) => {\r\n const returnDefault = !BurnPermitRequiredContactCondition || !BurnPermitConditionXref || !BurnPermitCondition || !contactCondition || !burnPermitId\r\n if (returnDefault) {\r\n return mapContactConditionForFormik()\r\n }\r\n const query = BurnPermitConditionXref.filter(x => \r\n x.BurnPermitConditionId === contactCondition.BurnPermitConditionId\r\n && x.BurnPermitId === burnPermitId)\r\n\r\n if (!query.exists()) {\r\n return mapContactConditionForFormik()\r\n }\r\n const xref = query.first()\r\n if (!xref || !xref.BurnPermitRequiredContactConditions \r\n || !xref.BurnPermitRequiredContactConditions.exists()) {\r\n return mapContactConditionForFormik()\r\n }\r\n \r\n const contacts = xref.BurnPermitRequiredContactConditions.toRefArray()\r\n return mapContactConditionForFormik(contacts)\r\n }\r\n)\r\n\r\n\r\nexport const burnPermitConditionsSelector = ormSelector(\r\n conditionsSelector,\r\n (orm, conditions) => {\r\n return conditions.map((c) => {\r\n return {\r\n BurnPermitConditionId : c.BurnPermitConditionId,\r\n CreateBy : c.CreateBy,\r\n CreateDate : c.CreateDate,\r\n UpdateBy : c.UpdateBy,\r\n UpdateDate : c.UpdateDate,\r\n BurnPermitConditionName : c.BurnPermitConditionName,\r\n BurnPermitConditionDescription : c.BurnPermitConditionDescription,\r\n ParentConditionId : c.ParentConditionId,\r\n ChildConditions : c.ChildConditions ? c.ChildConditions.all().toRefArray().map((c) => c.BurnPermitConditionId) : [],\r\n Category : c.Category,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const conditionFieldToNameMapSelector = ormWithPropSelector(\r\n ({ BurnPermitConditionXref, }, fieldName) => {\r\n if (!BurnPermitConditionXref || !fieldName) {\r\n return null\r\n }\r\n if (typeof BurnPermitConditionXref.mapFieldToName !== 'function') {\r\n return null\r\n }\r\n return BurnPermitConditionXref.mapFieldToName(fieldName)\r\n }\r\n)\r\n\r\nexport const permitConditionNameByIdSelector = ormByIdSelector(\r\n ({ BurnPermitCondition, }, conditionId) => {\r\n if (isNaN(conditionId)) {\r\n return null\r\n }\r\n\r\n if (!BurnPermitCondition.all().exists()) {\r\n return null\r\n }\r\n let c = BurnPermitCondition.withId(conditionId)\r\n if (!c) {\r\n return null\r\n }\r\n return c.BurnPermitConditionName\r\n }\r\n)\r\n\r\n\r\nexport const permitConditionByNameSelector = ormWithPropSelector(\r\n ({ BurnPermitCondition, }, conditionName) => {\r\n if (!BurnPermitCondition.all().exists()) {\r\n return null\r\n }\r\n let c = null\r\n try {\r\n c = BurnPermitCondition.get({ BurnPermitConditionName: conditionName, })\r\n } catch (e) {\r\n return null\r\n }\r\n if (!c) {\r\n return null\r\n }\r\n return {\r\n BurnPermitConditionId : c.BurnPermitConditionId,\r\n CreateBy : c.CreateBy,\r\n CreateDate : c.CreateDate,\r\n UpdateBy : c.UpdateBy,\r\n UpdateDate : c.UpdateDate,\r\n BurnPermitConditionName : c.BurnPermitConditionName,\r\n BurnPermitConditionDescription : c.BurnPermitConditionDescription,\r\n ParentConditionId : c.ParentConditionId,\r\n ChildConditions : c.ChildConditions ? c.ChildConditions.all().toRefArray().map(c => c.BurnPermitConditionId) : [],\r\n Category : c.Category,\r\n }\r\n }\r\n)\r\n\r\nexport const conditionValueKeySelector = ormWithPropSelector(\r\n ({ BurnPermitConditionXref, }, conditionName) => {\r\n if (!BurnPermitConditionXref) {\r\n return null\r\n }\r\n if (typeof BurnPermitConditionXref.mapConditionValueKey !== 'function') {\r\n return null\r\n }\r\n return BurnPermitConditionXref.mapConditionValueKey(conditionName)\r\n }\r\n)\r\n\r\n\r\nexport const permitHasConditions = createSelector(\r\n conditionValuesNewForBurnPermitSelector,\r\n values => {\r\n return values ? Object.values(values).length > 0 : false\r\n }\r\n)\r\n","// Libraries\r\nimport { put, select, call, fork, all, takeLatest, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { doFetch, getLookupData, showError, } from './ApiSagas'\r\nimport { getBurnPermitStatusHistory, } from './BurnPermitSagas'\r\nimport { hideLoading, showLoading, } from './AppSagas'\r\n\r\n// Reducers\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport { OrmTypes, } from '../redux/OrmRedux'\r\nimport { PermitConditionTypes, } from '../redux/BurnPermitConditionsRedux'\r\nimport { BurnPermitFormTypes, } from '../redux/BurnPermitFormRedux'\r\nimport { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\r\nimport { BurnPermitSignatureTypes, } from '../redux/BurnPermitSignatureRedux'\r\n\r\n// Selectors\r\nimport {\r\n activePermitIdSelector,\r\n conditionValueKeySelector,\r\n conditionFieldToNameMapSelector,\r\n permitConditionNameByIdSelector,\r\n permitConditionByNameSelector,\r\n contactConditionXrefForPermitSelector,\r\n} from '../selectors/conditionsSelectors'\r\nimport { networkStateSelector, equipmentTypeCheckboxSelector, } from '../selectors/selectors'\r\n\r\n// Models\r\nimport BurnPermit from '../models/BurnPermit'\r\n\r\nimport {\r\n extractContentStateValues, \r\n} from '../utilities'\r\n\r\n// Constants\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\r\n\r\n/**\r\n * Gather conditions for the active burn permit and set it if necessary.\r\n * @param {Object} action - The action object\r\n * @param {number} action.burnPermitId - The permit ID to set\r\n */\r\nexport function* setPermitForConditions ({ burnPermitId, }) {\r\n try {\r\n if (!burnPermitId || isNaN(burnPermitId)) {\r\n return\r\n }\r\n // Get the statuses in case for some reason the user navigates straight\r\n // to the conditions page, getting the statuses will ensure the conditions\r\n // and issue button are in their correct state (readonly or not) depending\r\n // on if the Permit is issued or not\r\n yield call(getBurnPermitStatusHistory, { burnPermitId, })\r\n yield call(getPermitConditions, { burnPermitId, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\n/**\r\n * Gather conditions for the active burn permit.\r\n * @param {Object} action - The action object\r\n * @param {number} action.permitId - The permit ID to set\r\n */\r\nexport function* getActivePermitConditions () {\r\n try{\r\n const activeId = yield select(activePermitIdSelector)\r\n yield call(getPermitConditions, { burnPermitId: activeId, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* upsertConditonResponse (responseBody, permitId) {\r\n let dayOfWeekXrefs = []\r\n let directionXrefs = []\r\n let equipmentXrefs = []\r\n let contactConds = []\r\n const conditionXrefs = responseBody.map((c) => {\r\n const newXref = { ...c, }\r\n if (newXref.BurnPermitEquipmentConditionXref) {\r\n equipmentXrefs = equipmentXrefs.concat(newXref.BurnPermitEquipmentConditionXref)\r\n delete newXref['BurnPermitEquipmentConditionXref']\r\n }\r\n if (newXref.BurnPermitProhibitedDayConditionXref) {\r\n dayOfWeekXrefs = dayOfWeekXrefs.concat(newXref.BurnPermitProhibitedDayConditionXref)\r\n delete newXref['BurnPermitProhibitedDayConditionXref']\r\n }\r\n if (newXref.BurnPermitWindDirectionConditionXref) {\r\n directionXrefs = directionXrefs.concat(newXref.BurnPermitWindDirectionConditionXref)\r\n delete newXref['BurnPermitWindDirectionConditionXref']\r\n }\r\n if (newXref.BurnPermitRequiredContactCondition){\r\n contactConds = contactConds.concat(newXref.BurnPermitRequiredContactCondition)\r\n delete newXref['BurnPermitRequiredContactCondition']\r\n }\r\n return newXref\r\n })\r\n\r\n const filterObj = {}\r\n if (permitId) {\r\n filterObj.BurnPermitId = permitId\r\n }\r\n\r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n modelName : 'BurnPermitConditionXref',\r\n objects : conditionXrefs,\r\n filterObj : { BurnPermitId: permitId, },\r\n })\r\n\r\n if (dayOfWeekXrefs.length > 0) {\r\n const BurnPermitConditionXrefId = dayOfWeekXrefs.map(x => x.BurnPermitConditionXrefId)[0]\r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n modelName : 'BurnPermitProhibitedDayConditionXref',\r\n objects : dayOfWeekXrefs,\r\n filterObj : { BurnPermitConditionXrefId, },\r\n })\r\n }\r\n\r\n if (directionXrefs.length > 0) {\r\n const BurnPermitConditionXrefId = directionXrefs.map(x => x.BurnPermitConditionXrefId)[0]\r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n modelName : 'BurnPermitWindDirectionConditionXref',\r\n objects : directionXrefs,\r\n filterObj : { BurnPermitConditionXrefId, },\r\n })\r\n }\r\n\r\n if (equipmentXrefs.length > 0) {\r\n const BurnPermitConditionXrefId = equipmentXrefs.map(x => x.BurnPermitConditionXrefId)[0]\r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n modelName : 'BurnPermitEquipmentConditionXref',\r\n objects : equipmentXrefs,\r\n filterObj : { BurnPermitConditionXrefId, },\r\n })\r\n }\r\n\r\n if (contactConds.length > 0) {\r\n const BurnPermitConditionXrefId = contactConds.map(x => x.BurnPermitConditionXrefId)[0]\r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n modelName : 'BurnPermitRequiredContactCondition',\r\n objects : contactConds,\r\n filterObj : { BurnPermitConditionXrefId, },\r\n })\r\n }\r\n}\r\n\r\nfunction* getConditionLookupData () {\r\n yield fork(getLookupData, { modelName: 'BurnPermitCondition', })\r\n yield fork(getLookupData, { modelName: 'Direction', })\r\n yield fork(getLookupData, { modelName: 'DaysOfWeek', })\r\n yield fork(getLookupData, { modelName: 'EquipmentType', })\r\n}\r\n\r\n/**\r\n * Gather conditions for the provided burn id.\r\n * @param {Object} action - The action object\r\n * @param {number} action.burnPermitId - The permit ID to request conditions for\r\n */\r\nexport function* getPermitConditions ({ burnPermitId, }) {\r\n try {\r\n\r\n const offline = yield select(networkStateSelector)\r\n if (!offline.online) {\r\n return\r\n }\r\n \r\n yield put({ type: PermitConditionTypes.SET_CONDITION_ERRORS, errors: {}, })\r\n yield call(showLoading)\r\n\r\n if (isNaN(parseInt(burnPermitId))) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'You must supply a Burn Permit ID to view the application.', })\r\n return\r\n }\r\n\r\n yield fork(getConditionLookupData)\r\n const burnPermDetailResp = yield call(doFetch, `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/conditions`)\r\n\r\n if (burnPermDetailResp.ok !== true) {\r\n yield put({ type: BurnPermitFormTypes.PERMIT_FAILED_TO_LOAD, })\r\n return\r\n }\r\n yield call(upsertConditonResponse, burnPermDetailResp.responseBody, burnPermitId)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nexport function* downloadPermitConditions () {\r\n try {\r\n const burnPermDetailResp = yield call(doFetch, `${BURN_PERMIT_ENDPOINT}/Conditions/Download`)\r\n\r\n if (burnPermDetailResp.ok !== true) {\r\n yield call(showError, 'An error occurred download Permit Conditions.')\r\n return\r\n }\r\n yield call(upsertConditonResponse, burnPermDetailResp.responseBody)\r\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'Conditions', status: true, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* saveContactConditions (permitId, contacts, updateIssuedContacts) {\r\n try {\r\n const offline = yield select(networkStateSelector)\r\n if (!offline.online) {\r\n return\r\n }\r\n yield call(showLoading)\r\n if (isNaN(parseInt(permitId))) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'You must supply a Burn Permit ID to set contact conditions.', })\r\n return\r\n }\r\n if (!contacts) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'Cannot submit contact conditions without values.', })\r\n return\r\n }\r\n\r\n const url = `${REACT_APP_SERVER_URL}BurnPermits/${permitId}/Conditions/Contacts`\r\n const request = { method: 'POST', body: { Contacts: contacts, UpdateIssuedContacts: updateIssuedContacts, }, }\r\n const res = yield call(doFetch, url, request)\r\n\r\n if (res.statusCode !== 200 || !res.ok) {\r\n yield put({ type: ApiTypes.FAILURE, error: res.responseBody, })\r\n return\r\n }\r\n\r\n const contactXrefResp = yield call(doFetch, url)\r\n if (contactXrefResp.ok !== true) {\r\n yield put({ type: BurnPermitFormTypes.PERMIT_FAILED_TO_LOAD, })\r\n return\r\n }\r\n\r\n if (contactXrefResp.statusCode === 200 && contactXrefResp.responseBody) {\r\n const xref = contactXrefResp.responseBody\r\n const newContacts = xref.BurnPermitRequiredContactCondition\r\n delete xref['BurnPermitRequiredContactCondition']\r\n delete xref['BurnPermitCondition']\r\n if (newContacts && Array.isArray(newContacts)) {\r\n yield put({ \r\n type : OrmTypes.UPSERT,\r\n modelName : 'BurnPermitConditionXref',\r\n properties : xref,\r\n })\r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n objects : newContacts,\r\n modelName : 'BurnPermitRequiredContactCondition',\r\n filterObj : { BurnPermitConditionXrefId: xref.BurnPermitConditionXrefId, },\r\n })\r\n }\r\n } else if (contactXrefResp.statusCode === 204) {\r\n const oldXref = yield select(contactConditionXrefForPermitSelector, permitId)\r\n yield put({\r\n type : OrmTypes.DESTROY_ALL,\r\n modelName : 'BurnPermitRequiredContactCondition',\r\n filterObj : { BurnPermitConditionXrefId: oldXref.BurnPermitConditionXrefId, },\r\n })\r\n yield put({\r\n type : OrmTypes.DESTROY,\r\n modelName : 'BurnPermitConditionXref',\r\n modelId : oldXref.BurnPermitConditionXrefId,\r\n })\r\n }\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n } catch (error) {\r\n yield call(showError, error)\r\n } finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nexport function* submitContactConditionsForActivePermit ({ contactObj, updateIssuedContacts, }) {\r\n try {\r\n yield put({ type: AppTypes.SHOW_LOADING , })\r\n if (!contactObj) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'Cannot submit contact conditions without values.' , })\r\n return\r\n }\r\n const { Contacts, } = contactObj\r\n const activeId = yield select(activePermitIdSelector)\r\n yield call(saveContactConditions, activeId, Contacts, updateIssuedContacts)\r\n } catch (error) {\r\n yield call(showError, error)\r\n } finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Gather conditions for the active burn permit.\r\n * @param {Object} action - The action object\r\n * @param {number} action.permitId - The permit ID to set\r\n * @param {boolean} action.updateIssuedConditions - Flag to indicate whether or not to update conditions on an issued permit\r\n */\r\nexport function* submitConditionsForActivePermit ({ conditions, updateIssuedConditions, }) {\r\n try {\r\n yield call(showLoading)\r\n yield put({ type: AppTypes.SHOW_LOADING, })\r\n const activeId = yield select(activePermitIdSelector)\r\n yield call(submitConditionsForPermit, activeId, conditions, updateIssuedConditions)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* mapXref (conditionId, conditionValue, permitId) {\r\n const conditionName = yield select(permitConditionNameByIdSelector, conditionId)\r\n const { valueKey, isXref, } = yield select(conditionValueKeySelector, conditionName)\r\n\r\n let xref = { BurnPermitConditionId: conditionId, BurnPermitId: permitId, }\r\n if (valueKey !== null) {\r\n if (!isXref) {\r\n if (valueKey === 'OtherCondition') {\r\n const [ plainText, formatted, ] = extractContentStateValues(conditionValue)\r\n xref[valueKey] = plainText\r\n xref[valueKey + 'Formatted'] = formatted\r\n } else {\r\n xref[valueKey] = conditionValue\r\n }\r\n }\r\n else if (conditionValue && Array.isArray(conditionValue)) {\r\n\r\n switch (valueKey) {\r\n case 'BurnPermitEquipmentConditionXref': {\r\n const otherEquipDesc = conditionValue.filter(c => typeof c === 'string')[0]\r\n const chosenEquips = conditionValue.filter(c => typeof c === 'number')\r\n let equipTypes = [], otherEquipId = null\r\n if (otherEquipDesc) {\r\n equipTypes = yield select(equipmentTypeCheckboxSelector, { category: 'Fire Line Construction', })\r\n otherEquipId = equipTypes.filter(e => e.Text === 'Other').map(e => e.Value)[0]\r\n }\r\n xref[valueKey] = chosenEquips.map((id) => {\r\n const mapped = { \r\n BurnPermitConditionXrefId : conditionId,\r\n EquipmentTypeId : id,\r\n }\r\n // If an Other Equipment is chosen and description is provided\r\n if (otherEquipId !== null && id === otherEquipId) {\r\n // Set the description on the Other Equip Type Xref\r\n mapped.OtherDescription = otherEquipDesc\r\n }\r\n return mapped\r\n })\r\n break\r\n }\r\n case 'BurnPermitProhibitedDayConditionXref':\r\n xref[valueKey] = conditionValue.map((id) => {\r\n return {\r\n BurnPermitConditionXrefId : conditionId,\r\n DayOfWeekId : id,\r\n }\r\n })\r\n break\r\n case 'BurnPermitWindDirectionConditionXref':\r\n xref[valueKey] = conditionValue.map((id) => {\r\n return {\r\n BurnPermitConditionXrefId : conditionId,\r\n DirectionId : id,\r\n }\r\n })\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n }\r\n return xref\r\n}\r\n\r\n\r\n/**\r\n * Gather conditions for the active burn permit.\r\n * @param {Object} action - The action object\r\n * @param {number} action.permitId - The permit ID to set\r\n */\r\nfunction* submitConditionsForPermit (permitId, conditions, updateIssuedConditions) {\r\n try{\r\n yield call(showLoading)\r\n\r\n if (isNaN(parseInt(permitId))) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'You must supply a Burn Permit ID to set conditions.', })\r\n return\r\n }\r\n yield put({ type: AppTypes.SHOW_LOADING, })\r\n\r\n if (conditions) {\r\n const ids = Object.keys(conditions)\r\n const xrefs = yield all(ids.map((id) => call(mapXref, id, conditions[id], permitId)))\r\n const burnPermDetailUrl = `${REACT_APP_SERVER_URL}BurnPermits/${permitId}/conditions`\r\n \r\n const body = yield call([ JSON, JSON.stringify, ], { ConditionXrefs: xrefs, UpdateIssuedConditions: updateIssuedConditions, })\r\n const request = { method: 'POST', body, }\r\n const res = yield call(doFetch, burnPermDetailUrl, request)\r\n \r\n if (res.statusCode !== 200 || !res.ok) {\r\n \r\n if (typeof res.responseBody === 'string') {\r\n yield put({ type: ApiTypes.FAILURE, error: res.responseBody, })\r\n }\r\n else if (typeof res.responseBody === 'object') {\r\n const eobj = yield call(parseErrorResponse, res.responseBody)\r\n if (eobj.validationErrors) {\r\n yield put({ type: PermitConditionTypes.SET_CONDITION_ERRORS, errors: eobj.validationErrors, })\r\n }\r\n yield put({ type: ApiTypes.FAILURE, error: eobj.message, })\r\n }\r\n else {\r\n yield put({ type: ApiTypes.FAILURE, error: `Failed to set conditions for Burn Permit ${permitId}`, })\r\n }\r\n return\r\n }\r\n yield put({ type: OrmTypes.DESTROY_ALL, modelName: 'BurnPermitConditionXref', filterObj: { BurnPermitId: permitId, }, })\r\n yield call(upsertConditonResponse, res.responseBody)\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n if (updateIssuedConditions) {\r\n yield put({ type: BurnPermitSignatureTypes.RE_ISSUE_PERMIT, burnPermitId: permitId, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* parseErrorResponse (response) {\r\n let message = null\r\n let validationErrors = null\r\n if ((typeof response !== 'object') || (!response)) {\r\n return { message, validationErrors, }\r\n }\r\n \r\n const { error, errors, title, } = response\r\n if (title) {\r\n message = title\r\n }\r\n if (error) {\r\n message = error\r\n return { message, }\r\n }\r\n\r\n if (!errors) {\r\n return { message, validationErrors, }\r\n }\r\n\r\n if (typeof errors === 'object') {\r\n const keys = Object.keys(errors)\r\n let errorObj = {}\r\n const idMatch = /\\[[0-9]+\\]\\.(.+)/\r\n for (let e of keys) {\r\n let found = e.match(idMatch)\r\n let name = yield select(conditionFieldToNameMapSelector, found[1])\r\n let condition = yield select(permitConditionByNameSelector, name)\r\n errorObj[condition.BurnPermitConditionId] = errors[e]\r\n }\r\n validationErrors = errorObj\r\n }\r\n return { message, validationErrors, }\r\n}\r\n\r\n\r\nexport const BurnPermitConditionSagas = [\r\n takeLatest(PermitConditionTypes.SET_PERMIT_FOR_CONDITIONS, setPermitForConditions),\r\n takeLatest(PermitConditionTypes.GET_PERMIT_CONDITIONS, getPermitConditions),\r\n takeLatest(PermitConditionTypes.SET_ACTIVE_PERMIT_CONDITIONS, submitConditionsForActivePermit),\r\n takeLatest(PermitConditionTypes.SET_CONTACT_CONDITIONS, submitContactConditionsForActivePermit),\r\n]","import { createActions, } from 'reduxsauce'\n \n/* ------------- Types and Action Creators ------------- */\n \nconst { Types, Creators, } = createActions({\n getBurnPermitSiteInfo : [ 'burnPermitSiteId', ],\n updateBurnPermitSite : [ 'burnPermitSite', ],\n updateBurnPermitSiteRequest : (modelName, url, body, showSuccess) => ({\n type : 'UPDATE_RECORD_REQUEST',\n meta : {\n offline: {\n effect : { url, init: { method: 'PUT', body: { ...body, }, }, },\n commit : { type: 'UPDATE_BURN_PERMIT_SITE_SUCCESS', modelName, showSuccess, },\n rollback : { type: 'API_FAIL', },\n },\n },\n }),\n updateBurnPermitSiteSuccess: [ 'payload', 'modelName', 'showSuccess', ],\n})\n \nexport const BurnPermitSiteTypes = Types\nexport default Creators","// Libraries\nimport { put, all, call, fork, select, takeEvery, takeLatest, } from 'redux-saga/effects'\n\n// Sagas\nimport { getLookupData, doFetch, showError, apiSuccess, extractPayload, } from './ApiSagas'\nimport { upsertLocalModel, upsertLocalModels, updateLocalModel, replaceAll, destroyLocalModel, destroyLocalModels, } from './OrmSagas'\nimport { getBurnPermitUnits, getBurnPermit as getBurnPermitSaga, } from './BurnPermitSagas'\n\n// Reducers\nimport { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\nimport BurnPermitSiteActions, { BurnPermitSiteTypes, } from '../redux/BurnPermitSiteRedux'\nimport { ApiTypes, } from '../redux/ApiRedux'\nimport { AppTypes, } from '../redux/AppRedux'\n\n// Models\nimport BurnPermitSearch from '../models/BurnPermitSearch'\nimport BurnPermitSite from '../models/BurnPermitSite'\nimport BurnPermitSiteEquipmentXref from '../models/BurnPermitSiteEquipmentXref'\n\n// Selectors\nimport { getBurnPermit as getBurnPermitSelector, } from '../selectors/selectors'\n\nimport {\n networkStateSelector,\n getBurnPermitId,\n} from '../selectors/selectors'\nimport { modelByIdSelector, } from '../selectors/modelSelectors'\n\n// Constants\nconst BURN_PERMIT_SITE_ENDPOINT = BurnPermitSite.endpoint()\nconst BURN_PERMIT_SITE_MODEL_NAME = BurnPermitSite.modelName\nconst BURN_PERMIT_SEARCH_MODEL_NAME = BurnPermitSearch.modelName\nconst EQUIPMENT_XREF_MODEL_NAME = BurnPermitSiteEquipmentXref.modelName\n\n\nfunction* getPermitSiteLookupData () {\n // The getLookupData saga will update the ORM for us\n // so we don't need to worry about the response\n yield fork(getLookupData, { modelName: 'ArrivalTime', })\n yield fork(getLookupData, { modelName: 'Distance', })\n yield fork(getLookupData, { modelName: 'Direction', })\n yield fork(getLookupData, { modelName: 'DaysOfWeek', })\n yield fork(getLookupData, { modelName: 'ReferenceDirectionType', })\n yield fork(getLookupData, { modelName: 'EquipmentType', })\n yield fork(getLookupData, { modelName: 'ForestType', })\n yield fork(getLookupData, { modelName: 'BurnReason', })\n yield fork(getLookupData, { modelName: 'ForestHealthProblemType', })\n}\n\n\n/**\n * Get the Burn Permit Site information for the provided Burn Permit Site ID.\n * Will also request the lookup data to map the statuses to for the controls\n * @param {number} burnPermitSiteId\n */\nexport function* getBurnPermitSiteInfo ({ burnPermitSiteId, }) {\n try {\n const { online, } = yield select(networkStateSelector)\n if (!online) {\n return\n }\n\n if (!burnPermitSiteId) {\n yield call(showError, 'You must provide a Burn Permit Site ID in order to retrieve Site Information.')\n return\n }\n \n const burnPermit = yield select(getBurnPermitSelector, { BurnPermitSiteId: burnPermitSiteId, })\n const burnPermitId = burnPermit.BurnPermitId\n\n yield all([\n call(getBurnPermitUnits, { burnPermitId, }),\n call(getPermitSiteLookupData),\n ])\n\n // Creates the Burn Permit Site Urls\n const permitSiteUrl = `${BURN_PERMIT_SITE_ENDPOINT}/${burnPermitSiteId}`\n \n const permitSiteResp = yield call(doFetch, permitSiteUrl)\n // If it's not an Ok, 200, or 404 response, throw an Error\n if (permitSiteResp.ok === false) {\n yield call(showError, `An error occurred fetching the Burn Permit Site Information for ID: ${burnPermitSiteId}.`)\n return\n }\n\n return yield call(upsertBurnPermitSite, permitSiteResp.responseBody)\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\nexport function* downloadBurnPermitSiteInfo () {\n try {\n const permitSiteResp = yield call(doFetch, `${BURN_PERMIT_SITE_ENDPOINT}/Download`)\n // If it's not an Ok, 200, or 404 response, throw an Error\n if (permitSiteResp.ok === false) {\n yield call(showError, 'An error occurred downloading the Burn Permit Site Information.')\n return\n }\n\n const {\n permitSites,\n equipXrefs,\n burnDays,\n referenceDirections,\n } = permitSiteResp.responseBody\n\n if (Array.isArray(permitSites)) {\n const sagas = []\n for (let i = 0, len = permitSites.length; i < len; i++) {\n const site = permitSites[i]\n const { BurnPermitSiteId, } = site\n site.IsLocal = false\n site.BurnPermitSiteEquipment = equipXrefs.filter(x => x.BurnPermitSiteId === BurnPermitSiteId)\n site.DaysOfWeek = burnDays.filter(x => x.BurnPermitSiteId === BurnPermitSiteId).map(x => x.DayOfWeekId)\n site.BurnPermitSiteReferenceDirections = referenceDirections.filter(x => x.BurnPermitSiteId === BurnPermitSiteId)\n\n sagas.push(call(upsertBurnPermitSite, site))\n }\n yield all(sagas)\n }\n \n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'SiteInfo', status: true, })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n\nfunction* updateBurnPermitSite ({ burnPermitSite, }) {\n const { online, } = yield select(networkStateSelector)\n const { BurnPermitSiteId, } = burnPermitSite\n const localBurnPermitSite = yield select(modelByIdSelector, { modelName: BURN_PERMIT_SITE_MODEL_NAME, modelId: BurnPermitSiteId, })\n \n if (!localBurnPermitSite || !localBurnPermitSite.IsLocal) {\n const url = `${BURN_PERMIT_SITE_ENDPOINT}/${BurnPermitSiteId}`\n if (!online) {\n yield put({\n type : ApiTypes.CANCEL_SUBMIT,\n action_type : BurnPermitSiteTypes.UPDATE_BURN_PERMIT_SITE_REQUEST,\n url : url,\n method : 'PUT',\n keyName : BurnPermitSite.options.idAttribute,\n keyValue : BurnPermitSiteId,\n })\n }\n yield put(BurnPermitSiteActions.updateBurnPermitSiteRequest(BURN_PERMIT_SITE_MODEL_NAME, url, burnPermitSite, online))\n }\n \n if (!online) {\n // redux-orm doesn't seem to be handling upserting xrefs when we define the model, so let's manually handle them\n const xrefIds = yield call(replaceAll, EQUIPMENT_XREF_MODEL_NAME, burnPermitSite.BurnPermitSiteEquipment, { BurnPermitSiteId, })\n const model = {\n ...burnPermitSite,\n BurnPermitSiteEquipment : xrefIds,\n DaysOfWeek : [ ...burnPermitSite.PlannedBurnDays, ],\n Submit : true,\n }\n const updatedPermitSiteInfo = yield call(updateLocalModel, BURN_PERMIT_SITE_MODEL_NAME, BurnPermitSiteId, model)\n if (updatedPermitSiteInfo) {\n // update local search result so the My Permits and Search results show the pending updates\n const BurnPermitId = yield select(getBurnPermitId, { BurnPermitSiteId, })\n yield call(updateLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, BurnPermitId, { BurnUnitName: updatedPermitSiteInfo.BurnUnitName, })\n }\n }\n}\n\nfunction* updateBurnPermitSiteSuccess (resp) {\n const burnPermitSite = yield call(extractPayload, resp)\n\n yield call(upsertBurnPermitSite, burnPermitSite)\n \n // call get burn permit detail saga\n const burnPermit = yield select(getBurnPermitSelector, { BurnPermitSiteId: burnPermitSite.BurnPermitSiteId, })\n const permitResp = yield call(getBurnPermitSaga, { burnPermitId: burnPermit.BurnPermitId, })\n const updatedPermit = permitResp.responseBody\n // If there was once an Exempt Id, but after getting the latest from the server and there is no\n // longer an ID, then delete the local model\n if (burnPermit.ForestHealthExemptId && !updatedPermit.ForestHealthExemptId) {\n // delete forest health exempt records\n yield call(destroyLocalModels, 'ForestHealthExemptProblemTypeXref', { ForestHealthExemptId: burnPermit.ForestHealthExemptId, })\n yield call(destroyLocalModel, 'ForestHealthExempt', burnPermit.ForestHealthExemptId)\n }\n const { online, } = yield select(networkStateSelector)\n if (online) {\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n}\n\nexport function* submitOfflineSiteEdits (localId, serverId) {\n try {\n // Get the local site model\n const burnPermitSite = yield select(modelByIdSelector, { modelName: BurnPermitSite.modelName, modelId: localId, })\n if (burnPermitSite.Submit) {\n // Get the ref data\n const permitSiteRef = { ...burnPermitSite._fields, }\n // Set the server id\n permitSiteRef.BurnPermitSiteId = serverId\n // Map the virtual many to many fk data\n // The Proximity Directions are stored as direct fks and don't need to be mapped manually\n permitSiteRef.BurnPermitSiteEquipment = burnPermitSite.BurnPermitSiteEquipment.toRefArray()\n // Update it\n const url = `${BURN_PERMIT_SITE_ENDPOINT}/${serverId}`\n const siteResp = yield call(doFetch, url, { method: 'PUT', body: permitSiteRef, })\n if (siteResp.ok) {\n yield fork(apiSuccess, { payload: siteResp.responseBody, modelName: BURN_PERMIT_SITE_MODEL_NAME, })\n return\n }\n yield call(showError, siteResp.responseBody)\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\nfunction* upsertBurnPermitSite (permitSite) {\n\n permitSite = yield call(replaceAllSiteEquipment, permitSite)\n\n permitSite = yield call(replaceAllReferenceDirections, permitSite)\n\n permitSite.IsLocal = false\n\n yield call(upsertLocalModel, BURN_PERMIT_SITE_MODEL_NAME, permitSite)\n \n return permitSite\n}\n\nfunction* replaceAllSiteEquipment (permitSite) {\n const BurnPermitSiteEquipment = permitSite.BurnPermitSiteEquipment || []\n\n const { BurnPermitSiteId, } = permitSite\n\n yield call(replaceAll, EQUIPMENT_XREF_MODEL_NAME, BurnPermitSiteEquipment, { BurnPermitSiteId, })\n\n return permitSite\n}\n\nfunction* replaceAllReferenceDirections (permitSite) {\n const xrefs = permitSite.BurnPermitReferenceDirectionXref\n if (xrefs.length) {\n const refDirs = []\n for (let i = 0, len = xrefs.length; i < len; i++) {\n const x = xrefs[i]\n refDirs.push({ ...x.ReferenceDirection, })\n delete x['ReferenceDirection']\n }\n const { BurnPermitSiteId, } = permitSite\n yield call(replaceAll, 'BurnPermitReferenceDirectionXref', xrefs, { BurnPermitSiteId, })\n yield call(upsertLocalModels, 'ReferenceDirection', refDirs)\n }\n delete permitSite['BurnPermitReferenceDirectionXref']\n \n return permitSite\n}\n\n\nexport const BurnPermitSiteSagas = [\n takeLatest(BurnPermitSiteTypes.GET_BURN_PERMIT_SITE_INFO, getBurnPermitSiteInfo),\n takeEvery(BurnPermitSiteTypes.UPDATE_BURN_PERMIT_SITE, updateBurnPermitSite),\n takeEvery(BurnPermitSiteTypes.UPDATE_BURN_PERMIT_SITE_SUCCESS, updateBurnPermitSiteSuccess),\n]","import { createSelector, } from 'reselect'\r\nimport { userIsSmokeStaff, userIsSmokeAdmin, userIsRegionAdmin, userIsSmokeMgmt, } from './userSelectors'\r\nimport { createAuthSelector, } from './permissionSelectors'\r\n\r\n//#region burn request permission selectors\r\n\r\nexport const userCanBypassSignature = createAuthSelector(\r\n ({ isSAWUser, isGovAgent, isDnr , isVerifiedAgent, }) => \r\n (isSAWUser && isGovAgent && isVerifiedAgent) || isDnr\r\n)\r\n\r\nexport const userCanEditAnyInfoRequiredRequest = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userSeesDetailedStatus = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanEnterAnyIgnDate = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userSeesPostBurnPrompt = createAuthSelector(\r\n ({ isSAWUser, isStateGovCust, }) => isSAWUser || isStateGovCust\r\n)\r\n\r\n//#endregion\r\n\r\n//#region burn request review permissions\r\n\r\nexport const userSeesInternalReqStatus = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanAssignBurnRequest = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userCanChangeRequestStatus = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userMustEnterStatusComment = createAuthSelector(\r\n ({ isStateGovCust, isSAWUser, }) => isSAWUser || isStateGovCust\r\n)\r\n\r\n/**\r\n * Returns whether or not the current user can override a Burn Request Decision\r\n * @returns {Boolean} The user can override a Burn Request Decision\r\n */\r\nexport const userCanOverrideDecisions = createSelector(\r\n userIsSmokeStaff,\r\n userIsSmokeAdmin,\r\n userIsRegionAdmin,\r\n (isSmokeStaff, isSmokeAdmin, isRegionAdmin) => \r\n isSmokeStaff === true || isSmokeAdmin === true || isRegionAdmin === true\r\n)\r\n\r\nexport const userCanMakeSMDecisions = createAuthSelector(\r\n ({ isDnr, }) => isDnr\r\n)\r\n\r\nexport const userIsDivisionApprover = createSelector(\r\n userIsSmokeMgmt,\r\n (isSmokeMgmt) => isSmokeMgmt\r\n)\r\n\r\n//#endregion\r\n","import { createSelector, } from 'reselect'\n\nimport {\n addressMapper,\n phoneMapper,\n emailMapper,\n ormSelector,\n ormWithPropSelector,\n propsSelector,\n ormByIdSelector,\n} from './selectors'\nimport { authPropsSelector, } from './userSelectors'\nimport { userPersonIdSelector, } from './userSelectors'\nimport { userCanMakeSMDecisions, } from './burnRequestPermissionSelectors'\nimport { userOnlySelectsGovCustType, userOnlySelectsInternalType, userOnlySelectsPublicTypes, } from './permissionSelectors'\nimport {\n PERSON_TYPE_DNR_STAFF,\n PERSON_TYPE_GOV_CUST,\n PERSON_TYPE_PRIVATE,\n PERSON_TYPE_GOV_AGENT,\n PERSON_TYPE_AGENT,\n mapGroupToReadableName,\n} from './env'\nimport { getNow, getTodaysDate, isAfter, } from '../utilities'\n\n//#region base selectors\n\nconst personStateSelector = state => state.Person\nconst sessionSelector = session => session\n\n//#endregion\n\n//#region mapping methods\n\nexport const personMapper = p => {\n if (!p) {\n return null\n }\n return {\n PersonId : p.PersonId,\n PersonFirstName : p.PersonFirstName || '',\n PersonMiddleName : p.PersonMiddleName || '',\n PersonLastName : p.PersonLastName || '',\n IsUser : p.IsUser || false,\n ParentId : p.ParentId,\n ConvertedToAgency : p.ConvertedToAgency,\n EmailId : p.EmailId,\n ContactMethodId : p.ContactMethodId || '',\n PersonTypeId : p.PersonTypeId || '',\n CreateDate : p.CreateDate,\n CreateBy : p.CreateBy,\n UpdateDate : p.UpdateDate,\n UpdateBy : p.UpdateBy,\n }\n}\n\nconst mapPersonForDataTable = p => {\n let person = {\n PersonId : p.PersonId,\n PersonTypeName : '',\n PersonFirstName : p.PersonFirstName || '',\n PersonMiddleName : p.PersonMiddleName || '',\n PersonLastName : p.PersonLastName || '',\n IsUser : p.IsUser || false,\n Email : '',\n Region : '',\n Agency : '',\n Phone : '',\n }\n if (p.PersonType) {\n person.PersonTypeName = p.PersonType.PersonTypeName || ''\n }\n if (p.Email) {\n person.Email = p.Email.EmailAddress\n }\n if (p.Regions !== null && p.Regions.exists()) {\n person.Region = p.Regions.first().RegionName\n }\n if (p.Agencies !== null && p.Agencies.exists()) {\n person.Agency = p.Agencies.first().AgencyName\n }\n if (p.Phones !== null && p.Phones.exists()) {\n person.Phone = p.Phones.first().PhoneNumber\n }\n return person\n}\n\nconst personTypeMapper = type => {\n return {\n Value : type.PersonTypeId,\n Text : type.PersonTypeName,\n }\n}\n\n//#endregion\n\n\n//#region person type helper methods\n\nconst _getGovCustPersonTypes = (personTypes) => {\n if (!personTypes) {\n return []\n }\n let query = personTypes.all().filter({ PersonTypeName: PERSON_TYPE_GOV_CUST, })\n if (!query.exists()) {\n return []\n }\n return query.toRefArray()\n}\n\nconst _getPublicPersonTypes = (personTypes) => {\n if (!personTypes) {\n return []\n }\n const query = personTypes.all()\n .filter(t => t.PersonTypeName !== PERSON_TYPE_DNR_STAFF && t.PersonTypeName !== PERSON_TYPE_GOV_CUST)\n if (!query.exists()) {\n return []\n }\n return query.toRefArray()\n}\n\nconst _getPersonType = (person) => {\n let pType = null\n if (person && person.PersonType) {\n pType = person.PersonType.PersonTypeName\n }\n return pType\n}\n\n/** Determine if a person model's type is `DNR Staff` */\nconst _getDNRPersonTypes = (personTypes) => {\n if (!personTypes) {\n return []\n }\n let query = personTypes.all().filter({ PersonTypeName: PERSON_TYPE_DNR_STAFF, })\n if (!query.exists()) {\n return []\n }\n return query.toRefArray()\n}\n\n/** Determine if a person model's type is `DNR Staff` */\nconst _personIsDnrStaffType = (person) => _getPersonType(person) === PERSON_TYPE_DNR_STAFF\n/** Determine if a person model's type is `WA State Gov't Customer` */\nconst _personIsGovCustType = (person) => _getPersonType(person) === PERSON_TYPE_GOV_CUST\n\n/** \n * Get the `PersonTypeId` for a given `PersonTypeName` in a `PersonType` QuerySet\n * @param {QuerySet} personTypes an ORM QuerySet of person types\n * @param {string} typeName the `PersonTypeName` to retrieve `PersonTypeId` for\n */\nconst _getPersonTypeIdByName = (personTypes, typeName) => {\n const qs = personTypes.filter({ PersonTypeName: typeName, })\n if (!qs.exists()){\n return null\n }\n return qs.first().PersonTypeId\n}\n\n//#endregion\n\n\n//#region person type selectors\n\nconst getPersonTypeForPersonId = createSelector(\n sessionSelector,\n propsSelector,\n ({ Person, }, personId) => {\n const person = Person.withId(personId)\n if (!person || !person.PersonTypeId || !person.PersonType) {\n return false\n }\n\n return person.PersonType.PersonTypeName\n }\n)\n\n/**\n * Returns bool indicating if the person is an Agency user or not\n * @param {Object} state \n * @returns {Boolean}\n */\nexport const personIsAgentType = ormByIdSelector(\n (session, personId) => {\n if (isNaN(personId)) {\n return false\n }\n const PersonTypeName = getPersonTypeForPersonId(session, personId)\n return PersonTypeName === PERSON_TYPE_AGENT\n }\n)\n\n/**\n * Returns bool indicating if the person is an Agency user or not\n * @param {Object} state \n * @returns {Boolean}\n */\nexport const personIsAgentOrAgencyPerson = ormByIdSelector(\n (session, personId) => {\n if (isNaN(personId)) {\n return false\n }\n const PersonTypeName = getPersonTypeForPersonId(session, personId)\n return PersonTypeName === PERSON_TYPE_GOV_AGENT || PersonTypeName === PERSON_TYPE_AGENT || PersonTypeName === PERSON_TYPE_GOV_CUST\n }\n)\n\nexport const agentPersonTypeIds = ormSelector(\n ({ PersonType, }) => {\n if (!PersonType) {\n return []\n }\n const query = PersonType.filter(x => x.PersonTypeName === PERSON_TYPE_GOV_AGENT || x.PersonTypeName === PERSON_TYPE_AGENT || x.PersonTypeName === PERSON_TYPE_GOV_CUST)\n if (!query.exists()) {\n return []\n }\n return query.toRefArray().map(x => x.PersonTypeId)\n }\n)\n\nexport const personTypesForPerson = ormByIdSelector(\n ({ Person, PersonType, }, PersonId) => {\n let types = [], person = null\n if (!isNaN(PersonId)) {\n person = Person.withId(PersonId)\n }\n if (_personIsDnrStaffType(person)) {\n types = _getDNRPersonTypes(PersonType)\n } else if (_personIsGovCustType(person)) {\n types = _getGovCustPersonTypes(PersonType)\n } else {\n types = _getPublicPersonTypes(PersonType)\n }\n return types.map(personTypeMapper)\n }\n)\n\nexport const personIsDnrSelector = ormByIdSelector(\n ({ Person, }, PersonId) => {\n let person = null\n if (PersonId) {\n person = Person.withId(PersonId)\n }\n return _personIsDnrStaffType(person)\n }\n)\n\n/** \n * Exported wrapper for `_getPersonTypeIdByName`:\n * Get the `PersonTypeId` for a given `PersonTypeName`\n*/\nexport const getPersonTypeIdByName = ormWithPropSelector(\n ({ PersonType, }, typeName) => _getPersonTypeIdByName(PersonType, typeName)\n)\n\nexport const personTypesByPermissionSelector = ormSelector(\n userOnlySelectsInternalType,\n userOnlySelectsGovCustType,\n userOnlySelectsPublicTypes,\n ({ PersonType, }, internalOnly, govCustOnly, publicOnly) => {\n let qs = PersonType.all()\n if (internalOnly) {\n qs = qs.filter({ PersonTypeName: PERSON_TYPE_DNR_STAFF , })\n } \n else if (govCustOnly) {\n qs = qs.filter({ PersonTypeName: PERSON_TYPE_GOV_CUST, })\n } \n else if (publicOnly) {\n qs = qs.filter(p => p.PersonTypeName !== PERSON_TYPE_DNR_STAFF \n && p.PersonTypeName !== PERSON_TYPE_GOV_CUST)\n }\n return qs.toRefArray().map(personTypeMapper)\n }\n)\n\n//#endregion\n\n\n//#region people by type selectors\n\nexport const landownerSelector = ormSelector(\n ({ Person, PersonType, }, filter) => {\n const privatePersonType = PersonType.filter({ PersonTypeName: PERSON_TYPE_PRIVATE, }).first()\n let personTypeId = privatePersonType ? privatePersonType.PersonTypeId : null\n let people = Person.filter(p => p.PersonTypeId === personTypeId || p.PersonTypeName === PERSON_TYPE_PRIVATE ).toModelArray()\n if (typeof filter === 'function') {\n people = people.filter(filter)\n }\n return people.map(p => {\n return {\n Value : p.PersonId,\n Text : p.toString(),\n }\n })\n }\n)\n\nexport const landownersForDatatableSelector = createSelector(\n landownerSelector,\n (_, landowners) => {\n return landowners.map(mapPersonForDataTable)\n }\n)\n\n\nexport const burnersForApplInfoSelector = createSelector(\n landownerSelector,\n (_, burners) => {\n return burners.map(p => {\n return {\n Value : p.PersonId,\n Text : p.toString(),\n }\n })\n }\n)\n\nexport const allPeople = createSelector(\n sessionSelector,\n session => {\n const dnrPersonTypeId = session.PersonType.filter({ PersonTypeName: PERSON_TYPE_DNR_STAFF, }).first().PersonTypeId\n const people = session.Person\n // Exclude previously merged People and DNR person types\n .filter(p => {\n // Merged records shouldn't be returned from the API, but just in case\n return !p.ParentId && p.PersonTypeId !== dnrPersonTypeId\n })\n .all()\n return people\n }\n)\n\nexport const peopleForMergeSelect = ormSelector(\n session => {\n const people = allPeople(session)\n if (people.exists()) {\n return people\n .orderBy('PersonLastName')\n .orderBy('PersonFirstName')\n .toRefArray()\n .map(p => {\n return {\n Value : p.PersonId,\n Text : `${p.PersonId}: ${p.PersonFirstName} ${p.PersonLastName}`,\n }\n })\n }\n return []\n }\n)\n\nexport const allPeopleForMerge = ormSelector(\n session => {\n const people = allPeople(session)\n if (people.exists()) {\n return people\n .toModelArray()\n .map(p => {\n const user = session.ApplicationUser.filter({ PersonId: p.PersonId, }).first()\n let personData = {\n UserName: {\n Readonly : true,\n Text : user ? user.UserName : '',\n Label : 'Username',\n },\n PersonId: {\n Value : p.PersonId,\n Label : 'Person ID',\n Required : true,\n },\n PersonFirstName: {\n Value : p.PersonFirstName,\n Label : 'First Name',\n Required : true,\n },\n PersonMiddleName: {\n Value : p.PersonMiddleName,\n Label : 'Middle Name',\n },\n PersonLastName: {\n Value : p.PersonLastName,\n Label : 'Last Name',\n Required : true,\n },\n AlertMethodId: {\n Value : p.AlertMethodId,\n Text : p.AlertMethod ? p.AlertMethod.AlertMethodName : '',\n Label : 'Alert Method',\n },\n ContactMethodId: {\n Value : p.ContactMethodId,\n Text : p.ContactMethod ? p.ContactMethod.ContactMethodName : '',\n Label : 'Contact Method',\n },\n PersonTypeId: {\n Value : p.PersonTypeId,\n Text : p.PersonType ? p.PersonType.PersonTypeName : '',\n Label : 'Person Type',\n },\n EmailId: {\n Value : p.EmailId,\n Text : p.Email ? p.Email.EmailAddress : '',\n Label : 'Email',\n },\n }\n personData.AgencyId = {\n Label: 'Agency',\n }\n if (p.PersonAgencyXrefs.exists()) {\n const agency = p.PersonAgencyXrefs.first()\n personData.AgencyId.Value = agency.PersonAgencyXrefAgency.AgencyId\n personData.AgencyId.Text = agency.PersonAgencyXrefAgency.AgencyName\n }\n return personData\n })\n }\n return []\n }\n)\n\n/**\n * Return the active person id for the person form\n * @return {int} The active person id\n */\nexport const activePersonFormSelector = createSelector( \n personStateSelector,\n ({ activePerson, }) => activePerson ? activePerson : -1\n)\n\nexport const personModelSelector = ormByIdSelector(\n (session, personId) => {\n if (isNaN(personId)) {\n return null\n }\n if (!session.Person.idExists(personId)) {\n return null\n }\n return session.Person.withId(personId)\n }\n)\n\nexport const personSelector = ormByIdSelector(\n ({ Person, ApplicationUser, }, personId) => {\n if (isNaN(personId)) {\n return null\n }\n if (!Person.idExists(personId)) {\n return null\n }\n const person = Person.withId(personId)\n const user = ApplicationUser.filter({ PersonId: personId, }).toModelArray()\n if (person.IsUser !== true && user.length) {\n person.IsUser = true\n }\n const mappedPerson = personMapper(person)\n if (user.length) {\n mappedPerson['UserName'] = user[0].UserName\n mappedPerson['UserGroups'] = user.map(u => mapGroupToReadableName(u.ClaimValue)).filter(g => !!g)\n }\n return mappedPerson\n }\n)\n\nexport const personIsUserSelector = ormByIdSelector(\n ({ Person, ApplicationUser, }, personId) => {\n if (isNaN(personId)) {\n return null\n }\n if (!Person.idExists(personId)) {\n return null\n }\n const person = Person.withId(personId)\n const user = ApplicationUser.filter({ PersonId: personId, }).toModelArray()\n if (person.IsUser !== true && user.length) {\n person.IsUser = true\n }\n return person.IsUser\n }\n)\n\n\nexport const personPhoneSelector = ormWithPropSelector(\n personStateSelector,\n ({ Person, }, personId, personState) => {\n if (isNaN(personId)) {\n return {\n phones : [],\n activeCount : 0,\n total : 0,\n }\n }\n const person = Person.withId(personId)\n if (!person) {\n return {\n phones : [],\n activeCount : 0,\n total : 0,\n }\n }\n let phones = person.Phones.toRefArray().map(phoneMapper)\n const total = phones.length\n const activePhones = phones.filter(p => p.Active === true)\n if ('Phones' in personState.inactiveData && personState.inactiveData.Phones.activeOnly) {\n phones = activePhones\n }\n return {\n phones,\n activeCount: activePhones.length,\n total,\n }\n }\n)\n\nexport const personRegionXrefSelector = ormByIdSelector(\n ({ PersonRegionXref, }, personId) => {\n const personRegions = PersonRegionXref.filter({ PersonRegionXrefPersonId: personId, })\n if (!personRegions.exists()) {\n return {}\n }\n const xref = personRegions.first()\n return {\n PersonRegionXrefId : xref.PersonRegionXrefId,\n RegionId : xref.PersonRegionXrefRegionId,\n RegionDefaultAssignee : xref.RegionDefaultAssignee ? 'yes' : 'no',\n MakesSmokeManagementDecisions : xref.MakesSmokeManagementDecisions ? 'yes' : 'no',\n }\n }\n)\n\nexport const userMakesSMDecisions = ormSelector(\n userPersonIdSelector,\n userCanMakeSMDecisions,\n ({ PersonRegionXref, }, personId, isAuthorized) => {\n return isAuthorized && PersonRegionXref\n .filter(x => x.PersonRegionXrefPersonId === parseInt(personId))\n .toRefArray()\n .some(x => x.MakesSmokeManagementDecisions)\n }\n)\n\nexport const personAgencyXrefSelector = ormWithPropSelector(\n personModelSelector,\n ({ PersonAgencyXref, }, personId, person = null) => {\n if (!person || !person.PersonAgencyXrefs) {\n return {}\n }\n let xref\n if (person.PersonAgencyXrefs.exists()) {\n xref = person.PersonAgencyXrefs.first()\n }\n else if (PersonAgencyXref.filter({ PersonAgencyXrefPersonId: personId, }).exists()) {\n xref = PersonAgencyXref.filter({ PersonAgencyXrefPersonId: personId, }).first()\n }\n if (!xref) {\n return {}\n }\n let AgencyName = ''\n if (xref.PersonAgencyXrefAgency) {\n AgencyName = xref.PersonAgencyXrefAgency.AgencyName\n }\n return {\n PersonAgencyXrefId : xref.PersonAgencyXrefId,\n AgencyId : xref.PersonAgencyXrefAgencyId,\n AgencyName : AgencyName,\n ConfirmedOn : xref.ConfirmedOn,\n ConfirmedBy : xref.ConfirmedBy,\n }\n }\n)\n\nexport const personAlertPrefXrefSelector = ormWithPropSelector(\n personModelSelector,\n (session, personId, person = null) => {\n if (!person) {\n return {}\n }\n let alertPrefs = {}\n if (Array.isArray(person.PersonAlertPreferenceXref) && person.PersonAlertPreferenceXref.length) {\n alertPrefs = person.PersonAlertPreferenceXref.reduce((acc, x) => {\n const name = `PersonAlertPreferenceXref_${x.AlertPreferenceId}`\n acc[name] = x\n return acc\n }, {})\n }\n return alertPrefs\n }\n)\n\nexport const personAddressesSelector = ormWithPropSelector(\n personStateSelector,\n ({ Person, }, personId, personState) => {\n if (isNaN(personId)) {\n return {\n addresses : [],\n activeCount : 0,\n total : 0,\n }\n }\n const person = Person.withId(personId)\n if (!person) {\n return {\n addresses : [],\n activeCount : 0,\n total : 0,\n }\n }\n\n let addresses = person.Addresses.toRefArray().map(addressMapper)\n const total = addresses.length\n const activeAddresses = addresses.filter(p => p.Active === true)\n if ('Addresses' in personState.inactiveData && personState.inactiveData.Addresses.activeOnly) {\n addresses = activeAddresses\n }\n return {\n addresses,\n activeCount: activeAddresses.length,\n total,\n }\n }\n)\n\nexport const personForMerge = ormByIdSelector(\n allPeopleForMerge,\n ({ BurnPermitSearch, BurnPermitSignature, BurnPermitDocument, Person, }, personId, allPeople) => {\n if (isNaN(personId)) {\n return null\n }\n const person = Person.withId(personId)\n if (!person) {\n return null\n }\n const personObj = allPeople.filter(p => p.PersonId.Value === personId)[0]\n if (!personObj) {\n return null\n }\n const personForMerge = { ...personObj, }\n personForMerge.Addresses = {\n Label : 'Addresses',\n Text : person.Addresses.toModelArray().map(a => a.toString()),\n Value : person.Addresses.toModelArray().map(a => a.AddressId),\n }\n personForMerge.Phones = {\n Label : 'Phones',\n Text : person.Phones.toModelArray().map(a => a.toString()),\n Value : person.Phones.toModelArray().map(a => a.PhoneId),\n }\n personForMerge.Permits = {\n Label : 'Permits',\n Text : [],\n Value : [],\n }\n \n const permits = BurnPermitSearch\n .filter(p =>\n p.LandownerId === personId\n || p.AgentId === personId\n )\n .all()\n .toModelArray()\n \n if (permits.length) {\n const permitIds = permits.map(p => p.BurnPermitId, [])\n \n const now = getNow()\n let showWarning = false\n personForMerge.Permits.Value = permitIds\n personForMerge.Permits.Text = permits.map(p => {\n const sig = BurnPermitSignature\n .filter(s => s.BurnPermitId === p.BurnPermitId)\n .first()\n const baseMessages = []\n if (p.BurnPermitNumber) {\n baseMessages.push(`${p.BurnPermitNumber} - ${p.BurnPermitStatus}`)\n }\n else {\n baseMessages.push(p.BurnPermitApplicationStatus)\n }\n // Return the baseMessages if:\n // * no signature\n // * a signature without a permit envelope id\n // * the permit is expired\n if (\n !sig\n || sig.PermitEnvelopeId === '[AUTO-APPROVED]'\n || isAfter(getTodaysDate(), p.BurnPermitExpirationDate)\n || p.LegacyId > 0\n ) {\n return baseMessages\n }\n else if (!sig.PermitEnvelopeId) {\n showWarning = true\n return [ ...baseMessages, 'This Permit still needs to be Issued', ]\n }\n \n const hasSignedPermit = BurnPermitDocument.filter(d => d.BurnPermitId == p.BurnPermitId && !!d.BurnPermitDocumentType)\n .all()\n .toModelArray()\n .some(d => d.BurnPermitDocumentType.BurnPermitDocumentTypeName === 'Signed Permit')\n \n if (isAfter(now, p.BurnPermitExpirationDate) && !hasSignedPermit && (!sig.PermitApproverSignedBy || !sig.PermitApplicantSignedBy)) {\n showWarning = true\n return [ ...baseMessages, 'This Permit may need to be Re-Issued to allow the applicant to DocuSign the Permit', ]\n }\n else if (hasSignedPermit) {\n return baseMessages\n }\n })\n if (showWarning) {\n personForMerge.Permits.Warning = 'One or more Permits may need to be Re-Issued to allow the applicant to DocuSign the Permit.'\n }\n }\n return personForMerge\n }\n)\n\nexport const personEmailSelector = ormWithPropSelector(\n personModelSelector,\n ({ Email, }, personId, person = null) => {\n if (!person) {\n return null\n }\n let email = person.Email\n if (!email && person.EmailId > -1) {\n const _email = Email.withId(person.EmailId)\n if (_email) {\n email = _email\n }\n }\n return emailMapper(email)\n }\n)\n\nexport const peopleForDatatableSelector = ormSelector(\n ({ Person, }) => {\n return Person.all().toModelArray().map(mapPersonForDataTable)\n }\n)\n\nexport const getPersonDataTableCols = ormSelector(\n authPropsSelector,\n ({ Person, }, auth) => Person.getDataTablesColumns(auth.isDnr)\n)\n\nexport const getUnsubmittedRequests = createSelector(\n personStateSelector,\n (state) => state ? state.burnRequestsPrompts || [] : []\n)\n\nexport const personInactiveData = createSelector(\n personStateSelector,\n state => {\n return { ...state.inactiveData, }\n }\n)\n","// Libraries\nimport { fork, put, call, all, select, takeEvery, takeLatest, } from 'redux-saga/effects'\nimport { difference, } from 'lodash'\n\n// Sagas\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { fetchAgencyData, getAllAgencies, } from './AgencySagas'\nimport { fetchAndCheck, getLookupData, doFetch, showError, } from './ApiSagas'\nimport { createLocalModel, destroyLocalModel, destroyLocalModels, upsertLocalModel, replaceAll, serverHasNewerData, upsertLocalModels, } from './OrmSagas'\nimport { GetAllRegions, } from './RegionSagas'\nimport { downloadBurnPermitSignatures, } from './BurnPermitSignatureSagas'\n\n// Reducers\nimport { OrmTypes, destroyRange, } from '../redux/OrmRedux'\nimport { AgencyTypes, } from '../redux/AgencyRedux'\nimport { AppTypes, } from '../redux/AppRedux'\nimport { UiTypes, } from '../redux/UiRedux'\nimport { UserTypes, } from '../redux/UserRedux'\nimport { PersonTypes, } from '../redux/PersonRedux'\nimport { MergeTypes, } from '../redux/MergeRedux'\n\n// Selectors\nimport { getLatestDateByModelName, modelByIdSelector, } from '../selectors/modelSelectors'\nimport { userObjSelector, userNameSelector, userPersonIdSelector, authPropsSelector, } from '../selectors/userSelectors'\nimport {\n getPersonTypeIdByName,\n personIsDnrSelector,\n personIsAgentOrAgencyPerson,\n agentPersonTypeIds,\n personPhoneSelector,\n personAddressesSelector,\n} from '../selectors/personSelectors'\nimport { \n storedAgentIds, \n storedLandownerIds, \n checkedLookupDataSelector, \n storedPersonIds,\n networkStateSelector,\n getDnrUsersForSelect,\n} from '../selectors/selectors'\nimport { DNR_GROUP_SIDS, } from '../selectors/env'\n\n// Utilities\nimport { objHasProp, } from '../utilities'\n\n// Models\nimport Address from '../models/Address'\nimport Phone from '../models/Phone'\nimport Person from '../models/Person'\nimport BurnPermit from '../models/BurnPermit'\nimport BurnPermitSearch from '../models/BurnPermitSearch'\nimport BurnRequest from '../models/BurnRequest'\nimport BurnRequestSearch from '../models/BurnRequestSearch'\nimport { userCanCreateNewPeople, userCanViewAppUserData, } from '../selectors/permissionSelectors'\n\n// CONSTANTS\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\nconst ADDRESS_MODEL_NAME = Address.modelName\nconst PHONE_MODEL_NAME = Phone.modelName\nconst PERSON_MODEL_NAME = Person.modelName\nconst DNR_ENDPOINT = Person.endpoint({ dnrOnly: true, })\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\nconst BURN_PERMIT_SEARCH_MODEL_NAME = BurnPermitSearch.modelName\nconst BURN_REQUEST_ENDPOINT = BurnRequest.endpoint()\nconst BURN_REQUEST_SEARCH_MODEL_NAME = BurnRequestSearch.modelName\n\nexport function* getPersonLookupData () {\n yield all([\n call(getLookupData, { modelName: 'PersonType', }),\n call(getLookupData, { modelName: 'ContactMethod', }),\n call(getLookupData, { modelName: 'AlertMethod', }),\n call(getLookupData, { modelName: 'AlertPreference', }),\n ])\n}\n\n\n/**\n * Update the local database to reflect the server state of Application Users\n */\nexport function* applicationUsersSuccess (users) {\n try {\n if (!users) {\n return\n }\n if (Array.isArray(users)) {\n const hasNewData = yield call(serverHasNewerData, 'ApplicationUser', null, users)\n if (!hasNewData) {\n return\n }\n yield put({\n type : OrmTypes.UPSERT_RANGE,\n modelName : 'ApplicationUser',\n records : users,\n })\n }\n else if (users !== null) {\n const hasNewData = yield call(serverHasNewerData, 'ApplicationUser', { PersonId: users.PersonId, }, users)\n if (!hasNewData) {\n return\n }\n yield put({\n type : OrmTypes.UPSERT,\n modelName : 'ApplicationUser',\n properties : users,\n })\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n/**\n * Retrieve all DNR Users and update the local database to reflect the server state\n */\nexport function* getAssignableUsers () {\n const { online, } = yield select(networkStateSelector)\n if (online) {\n // If there is only one user record locally, it's the current users\n // so we want to force check with the server\n const dnrUserCount = yield select(getDnrUsersForSelect)\n const forceCheck = dnrUserCount.length === 1\n // If it's not though, get the latest date for the DNR Users\n if (!forceCheck) {\n // build filter func for getLatestDateByModelName to filter on the DNR ClaimValue\n const dnrGroups = DNR_GROUP_SIDS.map(g => g.toLowerCase())\n const dnrUsersFilter = u => dnrGroups.includes(u.ClaimValue.toLowerCase())\n const date = yield select(getLatestDateByModelName, 'ApplicationUser', dnrUsersFilter)\n if (date) {\n const concurrencyResp = yield call(doFetch, `${DNR_ENDPOINT}/IsConcurrent?date=${date}`)\n if (concurrencyResp.ok && concurrencyResp.responseBody === true) {\n return\n }\n }\n }\n\n const resp = yield call(doFetch, DNR_ENDPOINT)\n if (!resp.ok) {\n yield call(showError, resp.responseBody)\n }\n yield call(applicationUsersSuccess, resp.responseBody)\n }\n}\n\nfunction* checkPeopleConcurrencyByType (personType, forceCheck = false, forceRefreshFromServer = false, basicInfo = false) {\n try {\n yield call(showLoading)\n const checkedData = yield select(checkedLookupDataSelector)\n const modelHasBeenChecked = checkedData.some(l => l === personType)\n if (modelHasBeenChecked && forceCheck === false) {\n return true\n }\n \n let endpoint = `${REACT_APP_SERVER_URL}People`\n if (forceRefreshFromServer === false) {\n let filterObj\n \n if (personType !== PERSON_MODEL_NAME) {\n const personTypeId = yield select(getPersonTypeIdByName, personType)\n filterObj = { PersonTypeId: personTypeId, }\n }\n \n const latestPersonDate = yield select(getLatestDateByModelName, PERSON_MODEL_NAME, filterObj)\n \n if (latestPersonDate) {\n const concurrencyEndpoint = personType === 'Agent' ? `${endpoint}/Agents` : endpoint\n const concurrencyResponse = yield call(doFetch, `${concurrencyEndpoint}/IsConcurrent?date=${latestPersonDate}${personType !== 'Agent' ? '&landownersOnly=true' : ''}`)\n \n const { responseBody: isConcurrent, } = concurrencyResponse\n if (isConcurrent) {\n return isConcurrent\n }\n }\n }\n \n yield fork(getPersonLookupData)\n \n if (personType === 'Private') {\n endpoint += '/Landowners'\n }\n else if (personType === 'Agent') {\n endpoint += '/Agents'\n }\n\n if (basicInfo !== null) {\n endpoint += `?basicInfo=${basicInfo}`\n }\n \n const response = yield call(doFetch, endpoint)\n \n if (response.ok !== true) {\n const error = response.responseBody || `Could not retrieve ${personType} users`\n yield call(showError, error)\n return\n }\n \n const { responseBody, } = response\n \n let storedPeople = []\n if (personType === 'Private') {\n storedPeople = yield select(storedLandownerIds)\n }\n else if (personType === 'Agent') {\n storedPeople = yield select(storedAgentIds)\n }\n else {\n storedPeople = yield select(storedPersonIds)\n }\n \n const incomingPersonIds = responseBody.map(r => r.PersonId)\n const peopleToDelete = difference(storedPeople, incomingPersonIds)\n if (peopleToDelete.length) {\n yield call(destroyRange, PERSON_MODEL_NAME, peopleToDelete)\n }\n \n yield call(upsertLocalModels, PERSON_MODEL_NAME, responseBody)\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Retrieve all People and update the local database to reflect the server state\n */\nexport function* getAllPeople ({ forceRefreshFromServer = false, }) {\n yield call(getAllAgencies)\n const forceCheck = true\n yield call(checkPeopleConcurrencyByType, PERSON_MODEL_NAME, forceCheck, forceRefreshFromServer)\n}\n\n/**\n * Retrieve all Landowners and update the local database to reflect the server state\n */\nexport function* getAllLandowners (forceRefreshFromServer = false, basicInfo) {\n yield fork(checkPeopleConcurrencyByType, 'Private', false, forceRefreshFromServer, basicInfo)\n}\n\n/**\n * Retrieve all Agents and update the local database to reflect the server state\n */\nexport function* getAllAgents (forceRefreshFromServer = false, basicInfo) {\n yield fork(checkPeopleConcurrencyByType, 'Agent', false, forceRefreshFromServer, basicInfo)\n}\n\nexport function* newPerson () {\n const username = yield select(userNameSelector)\n const newPerson = yield call(createLocalModel, PERSON_MODEL_NAME, { IsUser: false, CreateBy: username, CreateDate: new Date(), })\n yield put({\n type : PersonTypes.ACTIVE_PERSON_ID,\n personId : newPerson.PersonId,\n })\n}\n\nexport function* createPerson ({ person, email, }) {\n const user = yield select(userObjSelector)\n if (!user) {\n yield call(showError, 'Failed creating Person.')\n return\n }\n\n const canCreate = yield select(userCanCreateNewPeople)\n if (!canCreate) {\n yield call(showError, 'Failed creating Person.')\n return\n }\n\n try {\n if (Number.isInteger(person.PersonId)) {\n yield put({\n type : OrmTypes.DESTROY,\n modelName : PERSON_MODEL_NAME,\n modelId : person.PersonId,\n })\n }\n const personEndpoint = REACT_APP_SERVER_URL + 'People'\n const formattedPerson = {\n PersonFirstName : person.PersonFirstName,\n PersonMiddleName : person.PersonMiddleName,\n PersonLastName : person.PersonLastName,\n PersonTypeId : person.PersonTypeId,\n ContactMethodId : person.ContactMethodId,\n AlertMethodId : person.AlertMethodId,\n }\n\n if (email && email.EmailAddress) {\n formattedPerson.Email = {\n EmailAddress: email.EmailAddress,\n }\n }\n\n const request = { method: 'POST', body: formattedPerson, }\n\n const { response, statuscode, } = yield call(fetchAndCheck, personEndpoint, request)\n \n if (statuscode > 201) {\n return\n }\n\n if (!response || isNaN(response.PersonId) || response.PersonId < 1) {\n yield call(showError, 'Bad response received from create Person endpoint.')\n return\n }\n \n yield put({ type: AppTypes.REDIRECT_TO, route: `/admin/people/${response.PersonId}`, })\n }\n catch (err) {\n yield call(showError, 'Failed creating Person.')\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* getAgentInfo ({ personId, }) {\n yield call(showLoading)\n yield all([\n call(getAgent, { personId, }),\n call(getAgentEmail, { personId, }),\n call(getAgentPhones, { personId, }),\n call(getAgentAddresses, { personId, }),\n ])\n yield call(hideLoading)\n}\n\n\nexport function* updatePerson ({ person, }) {\n\n yield call(showLoading)\n\n const personEndpoint = `${REACT_APP_SERVER_URL}People/${person.PersonId}`\n \n const request = { method: 'PUT', body: person, }\n \n try {\n let { statuscode, } = yield call(fetchAndCheck, personEndpoint, request)\n\n if (statuscode !== 204) {\n return\n }\n\n const personId = person.PersonId\n yield fork(getPerson, { personId, })\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\nexport function* mergePeople ({ person, mergedPersonId, }) {\n\n yield call(showLoading)\n\n const personEndpoint = `${REACT_APP_SERVER_URL}People/${person.PersonId}/Merge`\n \n const request = { method: 'PUT', body: { Person: person, MergedPersonId: mergedPersonId, }, }\n \n try {\n const { statuscode, } = yield call(fetchAndCheck, personEndpoint, request)\n\n if (statuscode !== 204) {\n // we do not need to show a failure toast here as the `fetchAndCheck` saga does that for us\n return\n }\n\n yield all([\n put({ type: AppTypes.SHOW_SUCCESS, }),\n // Destroy the local copy of both people that were merged as well as their related data\n call(destroyLocalModel, PERSON_MODEL_NAME, mergedPersonId),\n call(destroyLocalModel, PERSON_MODEL_NAME, person.PersonId),\n call(destroyLocalModels, 'PersonPhones', { fromPersonId: person.PersonId, }),\n call(destroyLocalModels, 'PersonPhones', { fromPersonId: mergedPersonId, }),\n call(destroyLocalModels, 'PersonAddresses', { fromPersonId: person.PersonId, }),\n call(destroyLocalModels, 'PersonAddresses', { fromPersonId: mergedPersonId, }),\n call(destroyLocalModels, 'PersonAgencyXref', { PersonAgencyXrefPersonId: person.PersonId, }),\n call(destroyLocalModels, 'PersonAgencyXref', { PersonAgencyXrefPersonId: mergedPersonId, }),\n call(destroyLocalModels, 'PersonAlertPreferenceXref', { PersonId: person.PersonId, }),\n call(destroyLocalModels, 'PersonAlertPreferenceXref', { PersonId: mergedPersonId, }),\n ])\n yield put({ type: AppTypes.REDIRECT_TO, route: `/admin/people/${person.PersonId}`, })\n }\n catch (error) {\n yield call(showError, 'Failed merging Person.')\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* convertPersonToAgency ({ personId, }) {\n\n yield put({ type: UiTypes.CLOSE_MODAL, })\n yield call(showLoading)\n \n try {\n const { statuscode, response, } = yield call(fetchAndCheck, `${REACT_APP_SERVER_URL}People/${personId}/ConvertToAgency`, { method: 'POST', })\n\n if (statuscode !== 201) {\n // we do not need to show a failure toast here as the `fetchAndCheck` saga does that for us\n return\n }\n\n yield put({ type: AppTypes.REDIRECT_TO, route: `/admin/agencies/${response.AgencyId}`, })\n }\n catch (error) {\n yield call(showError, 'Failed converting Person to Agency.')\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\n/**\n * Get an Agent Person and related information\n * @param {number} personId - The ID of the Agent Person to request\n */\nexport function* getAgent ({ personId, }) {\n // can't do anything without a person id\n if (!personId || personId < 1) {\n return\n }\n\n try {\n const { res, response, statuscode, } = yield call(fetchPerson, personId, true)\n if (statuscode !== 200) {\n return\n }\n\n // if response is null, stop here\n if (!response) {\n yield call(showError, 'Did not receive a response for Agent ' + personId)\n return\n }\n\n const hasNewData = yield call(serverHasNewerData, PERSON_MODEL_NAME, { PersonId: personId, EmailId: response.EmailId, }, response)\n if (hasNewData) {\n yield call(upsertLocalModel, PERSON_MODEL_NAME, response)\n }\n return res\n }\n catch (e) {\n yield call(showError, 'An error occurred requesting Agent ' + personId)\n return\n }\n}\n\n/**\n * Get a person and related information\n * @param {number} action.personId - The ID of the Person to request\n */\nexport function* getPerson ({ personId, permitAndRequestSearch, includeLookupData = true, }) {\n permitAndRequestSearch = {\n permits : false,\n requests : false,\n clearPrevious : false,\n ...(permitAndRequestSearch || {}),\n }\n const { online, } = yield select(networkStateSelector)\n if (!online) {\n return true\n }\n\n // can't do anything without a person id\n if (!personId || personId < 1) {\n return\n }\n\n // get response body or throw\n let personResponse = null, res\n try {\n const result = yield call(fetchPerson, personId)\n res = result.res\n personResponse = result.response\n if (result.statuscode !== 200) {\n return\n }\n }\n catch (e) {\n yield call(showError, 'An error occurred requesting Person ' + personId)\n return\n }\n\n const reqs = []\n if (includeLookupData === true) {\n // do this synchronously to make sure we have person types\n reqs.push(call(getPersonLookupData))\n }\n\n if (Object.values(permitAndRequestSearch).some(v => v === true)) {\n if (permitAndRequestSearch.clearPrevious) {\n yield all([\n call(replaceAll, BURN_PERMIT_SEARCH_MODEL_NAME, []),\n call(replaceAll, BURN_REQUEST_SEARCH_MODEL_NAME, []),\n ])\n }\n if (permitAndRequestSearch.permits) {\n reqs.push(call(getPersonBurnPermits, { personId, }))\n }\n if (permitAndRequestSearch.requests) {\n reqs.push(call(getPersonBurnRequests, { personId, }))\n }\n }\n yield all(reqs)\n\n const canViewUserData = yield select(userCanViewAppUserData)\n if (canViewUserData) {\n if (personResponse.IsUser) {\n const userResp = yield call(doFetch, Person.endpoint({ personId, }))\n if (userResp.ok) {\n yield call(applicationUsersSuccess, userResp.responseBody)\n }\n }\n }\n\n const personAgencyXrefs = personResponse.PersonAgencyXrefs\n\n let isVerifiedAgent = false\n const isCurrentUser = (yield select(userPersonIdSelector)) === personId\n const personTypeId = personResponse ? personResponse.PersonTypeId : -1\n const agentPersonTypes = yield select(agentPersonTypeIds)\n if (agentPersonTypes.includes(personTypeId)) {\n isVerifiedAgent = personAgencyXrefs.some((x) => x.ConfirmedBy || x.ConfirmedDate)\n }\n\n const authProps = yield select(authPropsSelector)\n if (authProps.isVerifiedAgent !== isVerifiedAgent && isCurrentUser) {\n yield put({ type: UserTypes.UPDATE_USER_AGENCY_STATUS, isVerifiedAgent, })\n }\n\n if (Array.isArray(personAgencyXrefs) && (personAgencyXrefs.length > 0)) {\n try {\n const hasNewData = yield call(serverHasNewerData, 'PersonAgencyXref', { PersonAgencyXrefPersonId: personId, }, personAgencyXrefs)\n if (hasNewData) {\n yield call(replaceAll, 'PersonAgencyXref', personAgencyXrefs, { PersonAgencyXrefPersonId: personId, })\n }\n // Only request data if the current user is verified, otherwise\n // their requests will be rejected\n if ((canViewUserData || isVerifiedAgent) && personAgencyXrefs.length === 1 && personAgencyXrefs[0]) {\n const agencyId = personAgencyXrefs[0].PersonAgencyXrefAgencyId\n if (!isNaN(agencyId)) {\n yield call(fetchAgencyData, { agencyId, basicInfo: false, })\n }\n }\n }\n catch (e) {\n console.error(e)\n yield call(showError, 'An error occurred updating Person Agency information.')\n return\n }\n }\n else if (yield select(personIsAgentOrAgencyPerson, personId)) {\n yield call(destroyLocalModels, 'PersonAgencyXref', { PersonAgencyXrefPersonId: personId, })\n if (isCurrentUser) {\n yield put({ type: UserTypes.UPDATE_USER_AGENCY_STATUS, isVerifiedAgent: false, })\n }\n }\n\n yield call(handleEmail, personResponse.EmailId)\n\n const hasNewPersonData = yield call(serverHasNewerData, PERSON_MODEL_NAME, { PersonId: personId, EmailId: personResponse.EmailId, }, personResponse)\n if (hasNewPersonData) {\n // Delete the property since the agency xrefs are fetched above and handled separately\n // and also because they do not match the property names defined in Person.js\n delete personResponse.PersonAgencyXrefs\n \n yield call(upsertLocalModel, PERSON_MODEL_NAME, personResponse)\n }\n\n if (includeLookupData !== true) {\n return res\n }\n\n yield all([\n call(getLookupData, { modelName: 'AddressType', }),\n call(getLookupData, { modelName: 'PhoneType', }),\n call(getPersonAddresses, { personId, }),\n call(getPersonPhones, { personId, }),\n ])\n // Only req person regions if current user is DNR\n const personIsDnr = yield select(personIsDnrSelector, personId)\n if (personIsDnr) {\n yield all([\n call(GetAllRegions),\n call(getPersonRegions, personId),\n ])\n }\n return res\n}\n\nexport function* setPersonRegionInfo ({ personId, regionId, makesDecisions, }) {\n if (!regionId || !personId || makesDecisions === null || makesDecisions === undefined) {\n yield call(showError, 'Cannot set person region information without required parameters')\n return\n }\n let endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Regions`\n let request = {\n method : 'POST',\n body : {\n PersonRegionXrefPersonId : personId,\n PersonRegionXrefRegionId : regionId,\n MakesSmokeManagementDecisions : makesDecisions,\n },\n }\n \n try {\n const { response, statuscode, } = yield call(fetchAndCheck, endpoint, request)\n if (statuscode !== 201) {\n return\n }\n\n yield put({\n type : OrmTypes.UPSERT,\n properties : response,\n modelName : 'PersonRegionXref',\n })\n }\n catch (error) {\n yield call(showError, 'Setting person Region Information failed.')\n }\n}\n\nexport function* updatePersonRegionInfo ({ personId, regionId, makesDecisions, }) {\n if (!regionId || !personId || makesDecisions === null || makesDecisions === undefined) {\n yield call(showError, 'Cannot update person region information without required parameters')\n return\n }\n let endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Regions`\n let request = {\n method : 'PUT',\n body : {\n PersonRegionXrefPersonId : personId,\n PersonRegionXrefRegionId : regionId,\n MakesSmokeManagementDecisions : makesDecisions,\n },\n }\n \n try {\n const { statuscode, } = yield call(fetchAndCheck, endpoint, request)\n if (statuscode !== 204) {\n return\n }\n }\n catch (error) {\n yield call(showError, 'Updating Region Information failed.')\n return\n }\n \n try {\n const { response, statuscode, } = yield call(fetchAndCheck, endpoint)\n if (statuscode !== 200) {\n return\n }\n \n yield put({\n type : OrmTypes.UPSERT,\n properties : response,\n modelName : 'PersonRegionXref',\n })\n }\n catch (e) {\n yield call(showError, 'Failed retrieving current region information.')\n return\n }\n}\n\nexport function* getAgentPhones ({ personId, }) {\n yield call(getPersonPhones, { personId, isAgent: true, })\n}\n\nfunction* getPersonPhones ({ personId, isAgent, }) {\n if (!personId || isNaN(personId) || personId < 1) {\n yield call(showError, 'Cannot get Phone Numbers for Person without a Person Id.')\n return\n }\n\n let endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Phones`\n if (isAgent === true) {\n endpoint += '/Agent'\n }\n \n try {\n // do the api call\n const { response, statuscode, } = yield call(fetchAndCheck, endpoint)\n if (!response || statuscode !== 200) {\n return\n }\n\n if (response.length === 0) {\n const localPhones = yield select(personPhoneSelector, personId)\n if (localPhones.length) {\n const localPhoneIds = localPhones.map(p => p.PhoneId)\n yield call(destroyLocalModels, PHONE_MODEL_NAME, p => localPhoneIds.includes(p.PhoneId))\n }\n return\n }\n\n const phoneIds = response.map(r => r.PhoneId)\n const phoneIdFilter = a => { return phoneIds.includes(a.PhoneId) }\n const hasNewData = yield call(serverHasNewerData, PHONE_MODEL_NAME, phoneIdFilter, response)\n if (hasNewData) {\n yield call(replaceAll, PHONE_MODEL_NAME, response, phoneIdFilter)\n }\n // ensure the xrefs map up tho since they don't carry any audit data\n const xrefs = response.map(r => { return { fromPersonId: personId, toPhoneId: r.PhoneId, } })\n yield call(replaceAll, 'PersonPhones', xrefs, { fromPersonId: personId, })\n }\n catch (error) {\n yield call(showError, 'Get phones for person failed.')\n }\n}\n\nexport function* getAgentAddresses ({ personId, }) {\n yield call(getPersonAddresses, { personId, isAgent: true, })\n}\n\nfunction* getPersonAddresses ({ personId, isAgent, }) {\n if (!personId || isNaN(personId) || personId < 1) {\n yield call(showError, 'Cannot get Addresses for Person without a Person Id.')\n return\n }\n\n let endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Addresses`\n if (isAgent === true) {\n endpoint += '/Agent'\n }\n \n try {\n // do the api call\n const { response, statuscode, } = yield call(fetchAndCheck, endpoint)\n if (!response || statuscode !== 200) {\n return\n }\n\n if (response.length === 0) {\n const localAddrs = yield select(personAddressesSelector, personId)\n if (localAddrs.length) {\n const localAddrIds = localAddrs.map(a => a.AddressId)\n yield call(destroyLocalModels, ADDRESS_MODEL_NAME, a => localAddrIds.includes(a.AddressId))\n }\n return\n }\n \n const addrIds = response.map(r => r.AddressId)\n const addrIdFilter = a => { return addrIds.includes(a.AddressId) }\n const hasNewData = yield call(serverHasNewerData, ADDRESS_MODEL_NAME, addrIdFilter, response)\n if (hasNewData) {\n yield call(replaceAll, ADDRESS_MODEL_NAME, response, addrIdFilter)\n }\n // ensure the xrefs map up tho since they don't carry any audit data\n const xrefs = response.map(r => { return { fromPersonId: personId, toAddressId: r.AddressId, } })\n yield call(replaceAll, 'PersonAddresses', xrefs, { fromPersonId: personId, })\n }\n catch (error) {\n yield call(showError, 'Get addresses for person failed.')\n }\n}\n\nfunction* getPersonRegions (personId) {\n if (!personId || isNaN(personId) || personId < 1) {\n yield call(showError, 'Cannot get Region for Person without a valid Person Id.')\n return\n }\n\n try {\n const { response, statuscode, } = yield call(fetchAndCheck, `${REACT_APP_SERVER_URL}People/${personId}/Regions`)\n if (!response || response.length === 0 || statuscode !== 200) {\n yield call(destroyLocalModels, 'PersonRegionXref', { PersonRegionXrefPersonId: personId, })\n return\n }\n let regionXrefs = response\n if (!Array.isArray(regionXrefs)) {\n regionXrefs = [ response, ]\n }\n \n const filter = { PersonRegionXrefPersonId: personId, }\n const hasNewData = yield call(serverHasNewerData, 'PersonRegionXref', filter, regionXrefs)\n if (hasNewData) {\n yield call(replaceAll, 'PersonRegionXref', regionXrefs, filter)\n }\n }\n catch (error) {\n yield call(showError, 'Get Region for person failed.')\n }\n}\n\nexport function* getPersonDataForMerge ({ personId, }) {\n yield call(showLoading)\n yield put({ type: MergeTypes.FETCHING_DATA_FOR_MERGE, isFetchingData: true, })\n yield call(getPerson, { personId, permitAndRequestSearch: { permits: true, requests: true, }, })\n yield put({ type: MergeTypes.FETCHING_DATA_FOR_MERGE, isFetchingData: false, })\n yield call(hideLoading)\n}\n\nexport function* deletePersonPhone ({ personId, phoneId, }) {\n if (!personId || isNaN(personId) || personId < 1) {\n yield call(showError, 'Cannot delete Phone Number for Person without a Person Id.')\n return\n }\n if (!phoneId || isNaN(phoneId) || phoneId < 1) {\n yield call(showError, 'Cannot delete Phone Number for Person without a Phone Number Id.')\n return\n }\n\n try {\n // check if local model is tagged with IsLocal\n // if it is, do no submit call to api\n const phone = yield select(modelByIdSelector, { modelName: PHONE_MODEL_NAME, modelId: phoneId, })\n if (phone && !phone.IsLocal) {\n const endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Phones/${phoneId}`\n const { statuscode, } = yield call(fetchAndCheck, endpoint, { method: 'DELETE', })\n if (statuscode !== 200) {\n return\n }\n }\n yield call(destroyLocalModel, PHONE_MODEL_NAME, phoneId)\n }\n catch (error) {\n const errorMessage = objHasProp(error, 'message') ? error.message : 'Phone Number delete failed.'\n yield call(showError, errorMessage)\n return\n }\n}\n\nexport function* deletePersonAddress ({ personId, addressId, }) {\n if (!personId || isNaN(personId) || personId < 1) {\n yield call(showError, 'Cannot delete Address for Person without a Person Id.')\n return\n }\n if (isNaN(addressId)) {\n yield call(showError, 'Cannot delete Address for Person without an Address Id.')\n return\n }\n \n try {\n // check if local model is tagged with IsLocal\n // if it is, do no submit call to api\n const address = yield select(modelByIdSelector, { modelName: ADDRESS_MODEL_NAME, modelId: addressId, })\n if (address && !address.IsLocal) {\n const endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Addresses/${addressId}`\n const { statuscode, } = yield call(fetchAndCheck, endpoint, { method: 'DELETE', })\n if (statuscode !== 200) {\n return\n }\n }\n\n yield call(destroyLocalModel, ADDRESS_MODEL_NAME, addressId)\n }\n catch (error) {\n const errorMessage = objHasProp(error, 'message') ? error.message : 'Address delete failed.'\n yield call(showError, errorMessage)\n return\n }\n}\n\nexport function* createLocalPhoneForPerson ({ personId, }) {\n const newPhone = yield call(createLocalModel, PHONE_MODEL_NAME)\n yield call(createLocalModel, 'PersonPhones', { fromPersonId: personId, toPhoneId: newPhone.PhoneId, })\n}\n\nexport function* createPersonPhone ({ personId, phone, }) {\n if (!phone) {\n yield call(showError, 'Cannot create Phone Number for Person without a Phone Number object.')\n return\n }\n if (!personId) {\n yield call(showError, 'Cannot create Phone Number for Person without a Person Id.')\n return\n }\n\n const endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Phones`\n let createdPhone\n try {\n let res = yield call(fetchAndCheck, endpoint, { method: 'POST', body: phone, })\n if (res.statuscode !== 201) {\n return\n }\n createdPhone = res.response\n }\n catch (error) {\n yield call(showError, 'Phone Number creation failed.')\n return\n }\n\n if (!createdPhone || !createdPhone.PersonPhoneXrefId) {\n yield call(showError, 'Error in Phone Number creation: did not receive an Phone Number Xref.')\n return\n }\n \n const { PhoneId, } = phone\n if (!isNaN(PhoneId)) {\n yield call(destroyLocalModel, PHONE_MODEL_NAME, PhoneId)\n }\n\n yield call(upsertLocalModel, PHONE_MODEL_NAME, createdPhone.PersonPhoneXrefPhone)\n\n yield call(upsertLocalModel, 'PersonPhones', { fromPersonId: personId, toPhoneId: createdPhone.PersonPhoneXrefPhoneId, })\n}\n\nexport function* createLocalAddressForPerson ({ personId, }) {\n const newAddress = yield call(createLocalModel, ADDRESS_MODEL_NAME)\n yield call(createLocalModel, 'PersonAddresses', { fromPersonId: personId, toAddressId: newAddress.AddressId, })\n}\n\nexport function* createPersonAddress ({ personId, address, }) {\n if (!address) {\n yield call(showError, 'Cannot create Address for Person without an Address object.')\n return\n }\n if (!personId) {\n yield call(showError, 'Cannot create Address for Person without a Person Id.')\n return\n }\n\n const endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Addresses`\n let createdAddress\n try {\n let res = yield call(fetchAndCheck, endpoint, { method: 'POST', body: address, })\n if (res.statuscode !== 201) {\n return\n }\n createdAddress = res.response\n }\n catch (error) {\n yield call(showError, 'Address creation failed.')\n return\n }\n\n if (!createdAddress || !createdAddress.PersonAddressXrefId) {\n yield call(showError, 'Error in Address creation: did not receive an Address Xref.')\n return\n }\n\n const { AddressId, } = address\n if (!isNaN(AddressId)) {\n yield call(destroyLocalModel, ADDRESS_MODEL_NAME, AddressId)\n }\n\n yield call(upsertLocalModel, ADDRESS_MODEL_NAME, createdAddress.PersonAddressXrefAddress)\n\n yield call(upsertLocalModel, 'PersonAddresses', { fromPersonId: personId, toAddressId: createdAddress.PersonAddressXrefAddressId, })\n}\n\nexport function* createPersonEmail ({ personId, email, }) {\n const personEmailEndpoint = `${REACT_APP_SERVER_URL}People/${personId}/Email`\n \n const request = { method: 'POST', body: JSON.stringify(email), }\n let response = null\n try {\n let res = yield call(fetchAndCheck, personEmailEndpoint, request)\n if (res.statuscode !== 201) {\n return\n }\n response = res.response\n }\n catch (error) {\n yield call(showError, 'Failed creating Person Email.')\n return\n }\n yield call(upsertLocalModel, 'Email', response)\n yield call(upsertLocalModel, 'Person', { PersonId: personId, EmailId: response.EmailId, })\n \n if (!response || isNaN(response.EmailId) || response.EmailId < 1) {\n yield call(showError, 'Bad response recieved from create Person Email endpoint.')\n return\n }\n return\n}\n\nexport function* deletePersonEmail ({ personId, }) {\n const personEmailEndpoint = `${REACT_APP_SERVER_URL}People/${personId}/Email`\n let response = null\n \n try {\n let res = yield call(fetchAndCheck, personEmailEndpoint, { method: 'DELETE', })\n if (res.statuscode !== 200) {\n return\n }\n response = res.response\n }\n catch (error) {\n yield call(showError, 'Deleting Person Email failed.')\n return\n }\n\n if (!response) {\n yield call(showError, 'Bad response received from delete Person Email endpoint.')\n return\n }\n\n const { success, deletedId, } = response\n if (success === false) {\n yield call(showError, 'Deleting Person Email failed.')\n return\n } \n yield call(destroyLocalModel, 'Email', deletedId)\n}\n\n/**\n * Get and upsert the Person Agent Email Address\n * @param {number} personId - The ID of the Person Agent to request the email for\n */\nexport function* getAgentEmail ({ personId, }) {\n // quick exit\n if (!personId) {\n return\n }\n // set up request\n const endpoint = `${REACT_APP_SERVER_URL}People/${personId}/Email/Agent`\n \n const res = yield call(fetchAndCheck, endpoint)\n const { response, statuscode, } = res\n\n if (statuscode !== 200 && statuscode !== 204) {\n return\n }\n\n if (response) {\n const hasNewData = yield call(serverHasNewerData, 'Email', { EmailId: response.EmailId, }, response)\n if (hasNewData) {\n yield call(upsertLocalModel, 'Email', response)\n }\n }\n}\n\n/**\n * Get and upsert the email address\n * @param {number} emailId - The ID of the Email to request\n */\nfunction* handleEmail (emailId) {\n // quick exit\n if (!emailId) {\n return\n }\n // set up request\n const endpoint = REACT_APP_SERVER_URL + 'Emails/' + emailId\n // do the request\n const { response, statuscode, } = yield call(fetchAndCheck, endpoint)\n \n if (statuscode !== 200) {\n return\n }\n\n if (response) {\n const hasNewData = yield call(serverHasNewerData, 'Email', { EmailId: emailId, }, response)\n if (hasNewData) {\n yield call(upsertLocalModel, 'Email', response)\n }\n }\n}\n\n/**\n * Helper to fetch an Person/Agent by id\n * @param {int} personId \n * @returns {Object} The fetch response\n */\nfunction* fetchPerson (personId, isAgent) {\n // set up the person request\n let endpoint = REACT_APP_SERVER_URL + 'People/' + personId\n if (isAgent === true) {\n endpoint += '/Agent'\n }\n\n // get response body or throw\n return yield call(fetchAndCheck, endpoint)\n}\n\n/**\n * Retrieve all Burn Permits the Person is the Landowner or Agent of\n */\nfunction* getPersonBurnPermits ({ personId, }) {\n const { online, } = yield select(networkStateSelector)\n if (online) {\n const [\n landownerPermits,\n agentPermits,\n ] = yield all([\n call(doFetch, `${BURN_PERMIT_ENDPOINT}/Search?LandownerId=${personId}`),\n call(doFetch, `${BURN_PERMIT_ENDPOINT}/Search?AgentId=${personId}`),\n call(downloadBurnPermitSignatures, { personId, }),\n call(getPersonsPermitDocuments, { personId, }),\n ])\n let permits = []\n if (landownerPermits.ok && Array.isArray(landownerPermits.responseBody)) {\n permits = [ ...landownerPermits.responseBody, ]\n }\n if (agentPermits.ok && Array.isArray(agentPermits.responseBody)) {\n permits = [ ...permits, ...agentPermits.responseBody, ]\n }\n yield call(upsertLocalModels, BURN_PERMIT_SEARCH_MODEL_NAME, [ ...permits, ])\n }\n}\n\n/**\n * Retrieve all Burn Requests the Person is the Landowner or Agent of\n */\nfunction* getPersonBurnRequests ({ personId, }) {\n const { online, } = yield select(networkStateSelector)\n if (online) {\n const [\n landownerRequests,\n agentRequests,\n ] = yield all([\n call(doFetch, `${BURN_REQUEST_ENDPOINT}/Search?LandownerId=${personId}`),\n call(doFetch, `${BURN_REQUEST_ENDPOINT}/Search?AgentId=${personId}`),\n ])\n let requests = []\n if (landownerRequests.ok) {\n requests = [ ...landownerRequests.responseBody, ]\n }\n if (agentRequests.ok) {\n requests = [ ...requests, ...agentRequests.responseBody, ]\n }\n yield call(upsertLocalModels, BURN_REQUEST_SEARCH_MODEL_NAME, [ ...requests, ])\n }\n}\n\nfunction* getDataForPeopleMerge () {\n yield all([\n call(getAllPeople, { forceRefreshFromServer: true, }),\n call(getLookupData, { modelName: 'BurnPermitDocumentType', }),\n put({ type: MergeTypes.SET_OBJECT_TWO_ID, }), // Clear out the second object ID\n ])\n}\n\nfunction* getPersonsPermitDocuments ({ personId, }) {\n try {\n yield call(showLoading)\n\n if (!personId) {\n yield call(showError, 'You must supply a Person ID to retrieve documents for.')\n return\n }\n const url = `${BURN_PERMIT_ENDPOINT}/DownloadDocuments?personId=${personId}`\n\n const fileResp = yield call(doFetch, url)\n const { responseBody, } = fileResp\n if (fileResp.ok !== true) {\n let error = 'An error occurred retrieving files for the Person\\'s Permit Applications'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n if (responseBody.length) {\n yield call(upsertLocalModels, 'BurnPermitDocument', responseBody)\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* checkPersonBurnRequests ({ personId = null, }) {\n const { online, } = yield select(networkStateSelector)\n if (!online) {\n return true\n }\n let endpoint = REACT_APP_SERVER_URL + 'BurnRequests/Unsubmitted/' + personId\n const resp = yield call(fetchAndCheck, endpoint)\n const action = { type: PersonTypes.SET_UNSUBMITTED_REQUESTS, }\n if (resp.response && resp.response.length > 0) {\n action.requests = resp.response\n } else {\n action.requests = null\n }\n yield put(action)\n}\n\n\nexport const PersonSagas = [\n takeLatest(PersonTypes.NEW_PERSON, newPerson),\n takeLatest(PersonTypes.APPLICATION_USERS_SUCCESS, applicationUsersSuccess),\n takeLatest(PersonTypes.GET_ALL_PEOPLE, getAllPeople),\n takeLatest(PersonTypes.GET_ALL_LANDOWNERS, getAllLandowners),\n takeLatest(PersonTypes.GET_ALL_AGENTS, getAllAgents),\n takeLatest(PersonTypes.GET_PERSON, getPerson),\n takeLatest(PersonTypes.GET_LANDOWNER_INFO, getPerson),\n takeLatest(PersonTypes.GET_AGENT_INFO, getAgentInfo),\n takeLatest(PersonTypes.GET_AGENT_EMAIL, getAgentEmail),\n takeLatest(PersonTypes.GET_AGENT_ADDRESSES, getAgentAddresses),\n takeLatest(PersonTypes.GET_AGENT_PHONES, getAgentPhones),\n takeLatest(PersonTypes.GET_PERSON_LOOKUP_DATA, getPersonLookupData),\n takeLatest(PersonTypes.GET_ASSIGNABLE_USERS, getAssignableUsers),\n takeLatest(PersonTypes.GET_DATA_FOR_PEOPLE_MERGE, getDataForPeopleMerge),\n takeLatest(PersonTypes.GET_PERSON_DATA_FOR_MERGE, getPersonDataForMerge),\n takeLatest(AgencyTypes.CONVERT_PERSON_TO_AGENCY, convertPersonToAgency),\n takeLatest(PersonTypes.GET_UNSUBMITTED_REQUESTS, checkPersonBurnRequests),\n\n takeEvery(PersonTypes.GET_PERSON_DATA_FOR_MERGE, getPersonDataForMerge),\n takeEvery(PersonTypes.CREATE_PERSON, createPerson),\n takeEvery(PersonTypes.CREATE_LOCAL_ADDRESS_FOR_PERSON, createLocalAddressForPerson),\n takeEvery(PersonTypes.DELETE_PERSON_ADDRESS, deletePersonAddress),\n takeEvery(PersonTypes.CREATE_PERSON_ADDRESS, createPersonAddress),\n takeEvery(PersonTypes.DELETE_PERSON_PHONE, deletePersonPhone),\n takeEvery(PersonTypes.CREATE_LOCAL_PHONE_FOR_PERSON, createLocalPhoneForPerson),\n takeEvery(PersonTypes.CREATE_PERSON_PHONE, createPersonPhone),\n takeEvery(PersonTypes.CREATE_PERSON_EMAIL, createPersonEmail),\n takeEvery(PersonTypes.DELETE_PERSON_EMAIL, deletePersonEmail),\n takeEvery(PersonTypes.UPDATE_PERSON, updatePerson),\n takeEvery(PersonTypes.MERGE_PEOPLE, mergePeople),\n takeEvery(PersonTypes.UPDATE_PERSON_REGION, updatePersonRegionInfo),\n takeEvery(PersonTypes.SET_PERSON_REGION, setPersonRegionInfo),\n]\n","import { createSelector, } from 'reselect'\r\nimport { activeBurnPermitSelector, } from './burnPermitSelectors'\r\nimport { ormSelector, } from './selectors'\r\nimport { personMapper, } from './personSelectors'\r\n\r\n\r\nexport const applInfoStateSelector = (state) => state.ApplicantInfo\r\n\r\nconst applInfoAgencyIdSelector = createSelector(\r\n applInfoStateSelector, \r\n (state) => state && !isNaN(state.agencyId) ? state.agencyId : null\r\n)\r\n\r\nconst applInfoAgentIdSelector = createSelector(\r\n applInfoStateSelector, \r\n (state) => state && !isNaN(state.agentId) ? state.agentId : null\r\n)\r\n\r\nconst applInfoBurnerIdSelector = createSelector(\r\n applInfoStateSelector, \r\n (state) => state && !isNaN(state.landownerId) ? state.landownerId : null\r\n)\r\n\r\nconst activePermitBurnerSelector = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => permit && permit.Burner ? permit.Burner : null\r\n)\r\n\r\nconst activePermitAgentSelector = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => permit && permit.Agent ? permit.Agent : null\r\n)\r\n\r\nconst activePermitAgencySelector = ormSelector(\r\n activeBurnPermitSelector,\r\n ({ Agency, }, permit) => {\r\n if (permit && permit.Agency) {\r\n return permit.Agency\r\n }\r\n if (permit && permit.AgencyId) {\r\n return Agency.withId(permit.AgencyId)\r\n }\r\n return null\r\n }\r\n)\r\n\r\nconst selectedContactData = createSelector(\r\n applInfoStateSelector, \r\n (state) => {\r\n const {\r\n landownerId,\r\n agentId,\r\n BurnerPermitAddressId,\r\n BurnerPermitPrimaryPhoneId,\r\n BurnerPermitSecondaryPhoneId,\r\n AgentPermitAddressId,\r\n AgentPermitPrimaryPhoneId,\r\n AgentPermitSecondaryPhoneId,\r\n } = state || {}\r\n return {\r\n landownerId,\r\n agentId,\r\n BurnerPermitAddressId,\r\n BurnerPermitPrimaryPhoneId,\r\n BurnerPermitSecondaryPhoneId,\r\n AgentPermitAddressId,\r\n AgentPermitPrimaryPhoneId,\r\n AgentPermitSecondaryPhoneId,\r\n }\r\n }\r\n)\r\n\r\nconst withId = (model, id) => !isNaN(id) && model ? model.withId(id) : null\r\n\r\nconst applInfoMailToSelector = createSelector(\r\n applInfoStateSelector,\r\n (state) => {\r\n let MailPermitToAgentFlag = null\r\n if (state && typeof state.mailToAgent === 'boolean') {\r\n MailPermitToAgentFlag = state.mailToAgent\r\n }\r\n return { MailPermitToAgentFlag, }\r\n }\r\n)\r\n\r\nconst applInfoBurnerSelector = ormSelector(\r\n applInfoBurnerIdSelector,\r\n ({ Person, }, personId) => withId(Person, personId)\r\n)\r\n\r\nconst applInfoAgentSelector = ormSelector(\r\n applInfoAgentIdSelector,\r\n ({ Person, }, personId) => withId(Person, personId)\r\n)\r\n\r\nconst applInfoAgencySelector = ormSelector(\r\n applInfoAgencyIdSelector,\r\n ({ Agency, }, agencyId) => withId(Agency, agencyId)\r\n)\r\n\r\nconst applInfoFormBurnerSelector = ormSelector(\r\n applInfoBurnerIdSelector,\r\n applInfoBurnerSelector,\r\n activePermitBurnerSelector,\r\n selectedContactData,\r\n (session, activeBurnerId, activeBurner, permitBurner, _selectedContactData) => {\r\n if (isNaN(activeBurnerId) || activeBurnerId < 0) {\r\n return null\r\n }\r\n\r\n if (activeBurner) {\r\n const {\r\n BurnerPermitAddressId,\r\n BurnerPermitPrimaryPhoneId,\r\n BurnerPermitSecondaryPhoneId,\r\n } = _selectedContactData\r\n const props = { ...activeBurner, }._fields\r\n return {\r\n ...props,\r\n BurnerName: activeBurner.toString(),\r\n BurnerPermitAddressId,\r\n BurnerPermitPrimaryPhoneId,\r\n BurnerPermitSecondaryPhoneId,\r\n }\r\n } else if (permitBurner) {\r\n return permitBurner\r\n }\r\n return null\r\n }\r\n)\r\n\r\nconst applInfoFormAgentSelector = ormSelector(\r\n applInfoAgentIdSelector,\r\n applInfoAgentSelector,\r\n activePermitAgentSelector,\r\n selectedContactData,\r\n (session, activeAgentId, activeAgent, permitAgent, _selectedContactData) => {\r\n if (isNaN(activeAgentId) || activeAgentId < 0) {\r\n return null\r\n }\r\n if (activeAgent) {\r\n const {\r\n AgentPermitAddressId,\r\n AgentPermitPrimaryPhoneId,\r\n AgentPermitSecondaryPhoneId,\r\n } = _selectedContactData\r\n const props = { ...activeAgent, }._fields\r\n return {\r\n ...props,\r\n AgentName: activeAgent.toString(),\r\n AgentPermitAddressId,\r\n AgentPermitPrimaryPhoneId,\r\n AgentPermitSecondaryPhoneId,\r\n }\r\n } else if (permitAgent) {\r\n return permitAgent\r\n }\r\n return null\r\n }\r\n)\r\n\r\nconst mapAgency = function (agency) {\r\n return {\r\n AgencyId : agency.AgencyId,\r\n CreateDate : agency.CreateDate,\r\n CreateBy : agency.CreateBy,\r\n UpdateDate : agency.UpdateDate,\r\n UpdateBy : agency.UpdateBy,\r\n AgencyName : agency.AgencyName,\r\n AgencySubName1 : agency.AgencySubName1 || '',\r\n AgencySubName2 : agency.AgencySubName2 || '',\r\n AgencyOtherName : agency.AgencyOtherName || '',\r\n AgencyAbbreviation : agency.AgencyAbbreviation || '',\r\n AutoRegionApproval : agency.AutoRegionApproval,\r\n AddressId : agency.AddressId,\r\n EmailId : agency.EmailId,\r\n PhoneId : agency.PhoneId,\r\n Address : agency.Address ? agency.Address.toString() : null,\r\n Phone : agency.Phone ? agency.Phone.toString() : null,\r\n Email : agency.Email ? agency.Email.EmailAddress : null,\r\n }\r\n}\r\n\r\nconst applInfoFormAgencySelector = ormSelector(\r\n applInfoAgencyIdSelector,\r\n applInfoAgencySelector,\r\n activePermitAgencySelector,\r\n (session, activeAgencyId, activeAgency, permitAgency) => {\r\n if (isNaN(activeAgencyId) || activeAgencyId < 0 || activeAgencyId === '') {\r\n return null\r\n }\r\n if (activeAgency) {\r\n return mapAgency(activeAgency)\r\n }\r\n else if (permitAgency) {\r\n return mapAgency(permitAgency)\r\n }\r\n return null\r\n }\r\n)\r\n\r\nconst personAddressLookup = (personAddresses, person) => {\r\n if (!person) {\r\n return []\r\n }\r\n const query = personAddresses.filter({ fromPersonId: person.PersonId, })\r\n if (query.exists()) {\r\n return query.toModelArray().map(x => x.toAddressId).filter(a => !!a && a.Active)\r\n } else if (person.Addresses && person.Addresses.exists()) {\r\n return person.Addresses.all().toModelArray().filter(a => !!a && a.Active)\r\n }\r\n return []\r\n}\r\n\r\nconst personPhoneLookup = (personPhones, person) => {\r\n if (!person) {\r\n return []\r\n }\r\n const query = personPhones.filter({ fromPersonId: person.PersonId, })\r\n if (query.exists()) {\r\n return query.toModelArray().map(x => x.toPhoneId).filter(p => !!p && p.Active)\r\n } else if (person.Phones && person.Phones.exists()) {\r\n return person.Phones.all().toModelArray().filter(p => !!p && p.Active)\r\n }\r\n return []\r\n}\r\n\r\nconst personEmailLookup = (emails, person) => {\r\n if (!person) {\r\n return null\r\n }\r\n let email = null\r\n if (person.EmailId) {\r\n email = emails.withId(person.EmailId)\r\n } else {\r\n email = person.Email\r\n }\r\n return email\r\n}\r\n\r\nconst agencyAddressSelector = ormSelector(\r\n applInfoAgencySelector,\r\n ({ Address, }, agency) => {\r\n if (!agency) {\r\n return null\r\n }\r\n if (agency.Address) {\r\n return agency.Address\r\n }\r\n if (agency.AddressId) {\r\n return Address.withId(agency.AddressId)\r\n }\r\n return null\r\n }\r\n)\r\n\r\nconst agentAddressesSelector = ormSelector(\r\n applInfoFormAgentSelector,\r\n ({ PersonAddresses, }, person) => personAddressLookup(PersonAddresses, person)\r\n)\r\n\r\nconst burnerAddressesSelector = ormSelector(\r\n applInfoFormBurnerSelector,\r\n ({ PersonAddresses, }, person) => personAddressLookup(PersonAddresses, person)\r\n)\r\n\r\nconst agentPhonesSelector = ormSelector(\r\n applInfoFormAgentSelector,\r\n ({ PersonPhones, }, person) => personPhoneLookup(PersonPhones, person)\r\n)\r\n\r\nconst agencyPhoneSelector = ormSelector(\r\n applInfoAgencySelector,\r\n ({ Phone, }, agency) => {\r\n if (!agency) {\r\n return null\r\n }\r\n if (agency.Phone) {\r\n return agency.Phone\r\n }\r\n if (agency.PhoneId) {\r\n return Phone.withId(agency.PhoneId)\r\n }\r\n return null\r\n }\r\n)\r\n\r\nconst burnerPhonesSelector = ormSelector(\r\n applInfoFormBurnerSelector,\r\n ({ PersonPhones, }, person) => personPhoneLookup(PersonPhones, person)\r\n)\r\n\r\nconst agentEmailSelector = ormSelector(\r\n applInfoFormAgentSelector, \r\n ({ Email, }, agent) => personEmailLookup(Email, agent)\r\n)\r\n\r\nconst agencyEmailSelector = ormSelector(\r\n applInfoAgencySelector,\r\n ({ Email, }, agency) => {\r\n if (!agency) {\r\n return null\r\n }\r\n if (agency.Email) {\r\n return agency.Email\r\n }\r\n if (agency.EmailId) {\r\n return Email.withId(agency.EmailId)\r\n }\r\n return null\r\n }\r\n)\r\n\r\nconst burnerEmailSelector = ormSelector(\r\n applInfoFormBurnerSelector,\r\n ({ Email, }, burner) => personEmailLookup(Email, burner)\r\n)\r\n\r\nconst mapBurnerOrAgent = (person, addresses, phones, email) => {\r\n if (person) {\r\n const { Email, Addresses, Phones, } = person\r\n const mappedPerson = personMapper(person)\r\n let mappedEmail = null, mappedAddresses = [], mappedPhones = []\r\n\r\n if (email) {\r\n mappedEmail = {\r\n EmailId : email.EmailId,\r\n EmailAddress : email.EmailAddress,\r\n }\r\n } else if (Email) {\r\n mappedEmail = {\r\n EmailId : Email.EmailId,\r\n EmailAddress : Email.EmailAddress,\r\n }\r\n }\r\n if (addresses && addresses.length > 0) {\r\n mappedAddresses = addresses.map((a) => {\r\n return {\r\n Value : a.AddressId,\r\n Text : a.toString(),\r\n }\r\n })\r\n } else if (Addresses && Addresses.all().exists()) {\r\n mappedAddresses = Addresses.toModelArray().map((a) => {\r\n return {\r\n Value : a.AddressId,\r\n Text : a.toString(),\r\n }\r\n })\r\n }\r\n if (phones && phones.length > 0) {\r\n mappedPhones = phones.map(a => {\r\n return { \r\n Value : a.PhoneId,\r\n Text : a.toString(),\r\n }\r\n })\r\n \r\n } else if (Phones && Phones.all().exists()) {\r\n mappedAddresses = Phones.toModelArray().map((a) => {\r\n return {\r\n Value : a.PhoneId,\r\n Text : a.toString(),\r\n }\r\n })\r\n }\r\n\r\n mappedPerson['PersonName'] = person.toString() || ''\r\n return {\r\n Person : mappedPerson,\r\n Email : mappedEmail,\r\n Addresses : mappedAddresses,\r\n Phones : mappedPhones,\r\n }\r\n }\r\n return {\r\n Person : null,\r\n Email : null,\r\n Addresses : [],\r\n Phones : [],\r\n }\r\n}\r\n\r\nexport const applicantInfoBurnerSelector = ormSelector(\r\n applInfoFormBurnerSelector,\r\n burnerAddressesSelector,\r\n burnerPhonesSelector,\r\n burnerEmailSelector,\r\n (session, person, addresses, phones, email) => \r\n person ? mapBurnerOrAgent(person, addresses, phones, email) : null\r\n)\r\n\r\nexport const applicantInfoAgentSelector = ormSelector(\r\n applInfoFormAgentSelector,\r\n agentAddressesSelector,\r\n agentPhonesSelector,\r\n agentEmailSelector,\r\n (session, person, addresses, phones, email) => {\r\n if (!person) {\r\n return null\r\n }\r\n const agent = mapBurnerOrAgent(person, addresses, phones, email)\r\n agent.AgencyId = ''\r\n \r\n agent.Verified = person.IsUser ? '' : 'N/A'\r\n const xref = session.PersonAgencyXref.filter({ PersonAgencyXrefPersonId: person.PersonId, }).first()\r\n if (xref) {\r\n agent.AgencyId = xref.PersonAgencyXrefAgencyId\r\n if (person.IsUser) {\r\n agent.Verified = xref.ConfirmedBy ? 'Yes' : ''\r\n }\r\n }\r\n return agent\r\n }\r\n)\r\n\r\nexport const applicantInfoAgencySelector = ormSelector(\r\n applInfoFormAgencySelector,\r\n agencyAddressSelector,\r\n agencyPhoneSelector,\r\n agencyEmailSelector,\r\n (session, agency, address, phone, email) => {\r\n if (!agency) {\r\n return null\r\n }\r\n if (!agency.Address && address) {\r\n agency.Address = address.toString()\r\n }\r\n if (!agency.Phone && phone) {\r\n agency.Phone = phone.toString()\r\n }\r\n if (!agency.Email && email) {\r\n agency.Email = email.toString()\r\n }\r\n return agency\r\n }\r\n)\r\n\r\nconst permitApplInfoSelector = ormSelector(\r\n activeBurnPermitSelector,\r\n (session, permit) => {\r\n if (!permit) {\r\n return null\r\n }\r\n\r\n return {\r\n BurnPermitId : permit.BurnPermitId,\r\n BurnerId : permit.BurnerId || '',\r\n Landowner : permit.Burner ? permit.Burner.toString() : '',\r\n BurnerPermitAddressId : permit.BurnerPermitAddressId || '',\r\n BurnerPermitPrimaryPhoneId : permit.BurnerPermitPrimaryPhoneId || '',\r\n BurnerPermitSecondaryPhoneId : permit.BurnerPermitSecondaryPhoneId || '',\r\n AgencyId : permit.AgencyId || '',\r\n Agency : permit.Agency ? permit.Agency.toString() : '',\r\n AgentId : permit.AgentId || '',\r\n Agent : permit.Agent ? permit.Agent.toString() : '',\r\n AgentPermitAddressId : permit.AgentPermitAddressId || '',\r\n AgentPermitPrimaryPhoneId : permit.AgentPermitPrimaryPhoneId || '',\r\n AgentPermitSecondaryPhoneId : permit.AgentPermitSecondaryPhoneId || '',\r\n MailPermitToLandownerFlag : permit.MailPermitToLandownerFlag,\r\n MailPermitToAgentFlag : permit.MailPermitToAgentFlag ? permit.MailPermitToAgentFlag : false,\r\n CreateBy : permit.CreateBy || '',\r\n CreateDate : permit.CreateDate || '',\r\n UpdateBy : permit.UpdateBy || '',\r\n UpdateDate : permit.UpdateDate || '',\r\n }\r\n }\r\n)\r\n\r\nexport const permitForApplicantInfoSelector = ormSelector(\r\n permitApplInfoSelector,\r\n applInfoFormBurnerSelector,\r\n applInfoFormAgentSelector,\r\n applInfoFormAgencySelector,\r\n applInfoMailToSelector,\r\n (session, permit, burner, agent, agency, mailTo) => {\r\n if (!permit) {\r\n return null\r\n }\r\n\r\n const { MailPermitToAgentFlag, } = mailTo\r\n let modifiedPermit = {\r\n ...permit,\r\n MailPermitToAgentFlag: MailPermitToAgentFlag !== null\r\n ? MailPermitToAgentFlag\r\n : permit.MailPermitToAgentFlag,\r\n }\r\n\r\n if (agent && modifiedPermit.MailPermitToAgentFlag) {\r\n if (agent.PersonId !== permit.AgentId) {\r\n modifiedPermit.AgentId = agent.PersonId\r\n modifiedPermit.Agent = agent.AgentName\r\n modifiedPermit.AgentPermitAddressId = agent.AgentPermitAddressId || ''\r\n modifiedPermit.AgentPermitPrimaryPhoneId = agent.AgentPermitPrimaryPhoneId || ''\r\n modifiedPermit.AgentPermitSecondaryPhoneId = agent.AgentPermitSecondaryPhoneId || ''\r\n\r\n modifiedPermit.AgencyId = ''\r\n }\r\n \r\n modifiedPermit.Verified = agent.IsUser ? '' : 'N/A'\r\n const xref = session.PersonAgencyXref.filter({ PersonAgencyXrefPersonId: agent.PersonId, }).first()\r\n if (xref) {\r\n modifiedPermit.AgencyId = xref.PersonAgencyXrefAgencyId\r\n if (agent.IsUser) {\r\n modifiedPermit.Verified = xref.ConfirmedBy ? 'Yes' : ''\r\n }\r\n }\r\n\r\n // Perform this check separately so we don't clear out the Address and Phone IDs\r\n // This may fire due to the asynchronous nature of how the data is collected and the\r\n // Permit may have the AgentId set, but it may not have the Person's info downloaded\r\n // yet which results in the Agent name not appearing in the auto-complete\r\n if (agent.AgentName !== permit.Agent) {\r\n modifiedPermit.Agent = agent.AgentName\r\n }\r\n }\r\n else {\r\n modifiedPermit.Agent = ''\r\n modifiedPermit.AgentId = ''\r\n modifiedPermit.AgentPermitAddressId = ''\r\n modifiedPermit.AgentPermitPrimaryPhoneId = ''\r\n modifiedPermit.AgentPermitSecondaryPhoneId = ''\r\n }\r\n\r\n if (agency) {\r\n if (agency.AgencyId !== permit.AgencyId) {\r\n modifiedPermit.AgencyId = agency.AgencyId\r\n modifiedPermit.Agency = agency.AgencyName\r\n }\r\n }\r\n\r\n if (burner) {\r\n if (burner.PersonId !== permit.BurnerId) {\r\n modifiedPermit.BurnerId = burner.PersonId || ''\r\n modifiedPermit.Landowner = burner.BurnerName\r\n modifiedPermit.BurnerPermitAddressId = burner.BurnerPermitAddressId || ''\r\n modifiedPermit.BurnerPermitPrimaryPhoneId = burner.BurnerPermitPrimaryPhoneId || ''\r\n modifiedPermit.BurnerPermitSecondaryPhoneId = burner.BurnerPermitSecondaryPhoneId || ''\r\n }\r\n // Perform this check separately so we don't clear out the Address and Phone IDs\r\n // This may fire due to the asynchronous nature of how the data is collected and the\r\n // Permit may have the BurnerId set, but it may not have the Person's info downloaded\r\n // yet which results in the Landowner name not appearing in the auto-complete\r\n if (burner.BurnerName !== permit.Landowner) {\r\n modifiedPermit.Landowner = burner.BurnerName\r\n }\r\n }\r\n \r\n return modifiedPermit\r\n }\r\n)","// Libraries\r\nimport { put, select, call, all, fork, spawn, takeLatest, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { fetchAgencyData, } from './AgencySagas'\r\nimport { getAllAgencies, } from './AgencySagas'\r\nimport { hideLoading, showLoading, } from './AppSagas'\r\nimport { doFetch, showError, checkModelConcurrency, } from './ApiSagas'\r\nimport { replaceAll, } from './OrmSagas'\r\nimport { updateLocalModel, } from './OrmSagas'\r\nimport { getAllAgents, getAllLandowners, getAgentInfo, getPerson, } from './PersonSagas'\r\nimport { getBurnPermitStatusHistory, } from './BurnPermitSagas'\r\n\r\n// Reducers\r\nimport ApiActions, { ApiTypes, } from '../redux/ApiRedux'\r\nimport { ApplicantInfoTypes, } from '../redux/ApplicantInfoSectionRedux'\r\nimport { BurnPermitFormTypes, } from '../redux/BurnPermitFormRedux'\r\nimport { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\r\n\r\n// Models\r\nimport BurnPermit from '../models/BurnPermit'\r\nimport BurnPermitSearch from '../models/BurnPermitSearch'\r\n\r\n// Selectors\r\nimport { applInfoStateSelector, } from '../selectors/applicantInfoSelectors'\r\nimport { userNeedsLandownersOffline, } from '../selectors/permissionSelectors'\r\nimport { networkStateSelector, } from '../selectors/selectors'\r\nimport { modelByIdSelector, getModelEndpoint, } from '../selectors/modelSelectors'\r\nimport { activeBurnPermitIdSelector, permitApplicationStatus, } from '../selectors/burnPermitSelectors'\r\nimport { userCanSelectPermitLandowner, } from '../selectors/burnPermitPermissionSelectors'\r\n\r\n\r\n// Constants\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\r\nconst BURN_PERMIT_MODEL_NAME = BurnPermit.modelName\r\nconst BURN_PERMIT_SEARCH_MODEL_NAME = BurnPermitSearch.modelName\r\n\r\n\r\nfunction* getPersonContactData (modelName) {\r\n let modelEndpoint = yield select(getModelEndpoint, modelName)\r\n\r\n if (modelEndpoint.indexOf(REACT_APP_SERVER_URL) === -1) {\r\n modelEndpoint = `${REACT_APP_SERVER_URL}${modelEndpoint}`\r\n }\r\n\r\n const isConcurrent = yield call(checkModelConcurrency, modelEndpoint, modelName)\r\n if (isConcurrent) {\r\n return isConcurrent\r\n }\r\n\r\n const response = yield call(doFetch, modelEndpoint)\r\n\r\n const { responseBody, } = response\r\n\r\n if (Array.isArray(responseBody)) {\r\n yield fork(replaceAll, modelName, responseBody)\r\n }\r\n}\r\n\r\nexport function* downloadApplicantInfo () {\r\n try {\r\n\r\n // Get the related contact data and write them to the local orm\r\n yield spawn(getPersonContactData, 'Phone')\r\n yield spawn(getPersonContactData, 'Address')\r\n yield spawn(getPersonContactData, 'Email')\r\n\r\n // Get the agents and landowners, if authorized, and write them to the local orm\r\n const forceRefreshFromServer = true\r\n const personReqs = [ call(getAllAgents, forceRefreshFromServer), call(getAllAgencies, forceRefreshFromServer), ]\r\n const downloadLandowners = yield select(userNeedsLandownersOffline)\r\n if (downloadLandowners) {\r\n personReqs.push(call(getAllLandowners, forceRefreshFromServer))\r\n }\r\n\r\n yield all(personReqs)\r\n yield call(getAllPeopleLookupData)\r\n\r\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'ApplicantInfo', status: true, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nfunction* getAllPeopleLookupData () {\r\n yield call(showLoading)\r\n // Get the xrefs to link up the related data\r\n const xrefResp = yield call(doFetch, `${REACT_APP_SERVER_URL}People/Xrefs`)\r\n if (xrefResp.ok === false) {\r\n yield call(showError, 'An error occurred getting contact information for applicants.')\r\n return\r\n }\r\n const { addressXrefs, phoneXrefs, alertPrefsXrefs, agencyXrefs, } = xrefResp.responseBody\r\n \r\n if (Array.isArray(addressXrefs)) {\r\n // These are virtual models so we have to manipulate the respone objects to match the local orm keys\r\n yield spawn(replaceAll, 'PersonAddresses', addressXrefs.map(x => { return { fromPersonId: x.PersonAddressXrefPersonId, toAddressId: x.PersonAddressXrefAddressId, }}))\r\n }\r\n if (Array.isArray(phoneXrefs)) {\r\n // These are virtual models so we have to manipulate the respone objects to match the local orm keys\r\n yield spawn(replaceAll, 'PersonPhones', phoneXrefs.map(x => { return { fromPersonId: x.PersonPhoneXrefPersonId, toPhoneId: x.PersonPhoneXrefPhoneId, }}))\r\n }\r\n if (Array.isArray(alertPrefsXrefs)) {\r\n // This is an explicit model that the response object matches\r\n yield spawn(replaceAll, 'PersonAlertPreferenceXref', alertPrefsXrefs)\r\n }\r\n if (Array.isArray(agencyXrefs)) {\r\n // This is an explicit model that the response object matches\r\n yield spawn(replaceAll, 'PersonAgencyXref', agencyXrefs)\r\n }\r\n yield call(hideLoading)\r\n}\r\n\r\n\r\nfunction* getApplicantInfoData () {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online) {\r\n return\r\n }\r\n\r\n yield call(showLoading)\r\n const BurnPermitId = yield select(activeBurnPermitIdSelector)\r\n let appStatus = yield select(permitApplicationStatus, BurnPermitId)\r\n // If we don't have the statuses, go get them since there is logic\r\n // later in this saga that is dependent on that status value\r\n if (!appStatus) {\r\n yield call(getBurnPermitStatusHistory, { burnPermitId: BurnPermitId, })\r\n // Set the status now that we have it\r\n appStatus = yield select(permitApplicationStatus, BurnPermitId)\r\n }\r\n const forceRefresh = false, basicInfo = true\r\n let reqs = [], activeOnly = null\r\n // Only get the Agents, Agencies, and Landowners if the app is pending\r\n if (appStatus && appStatus.Status === 'Pending') {\r\n activeOnly = true // Only get the active addresses and phones if the application is still pending\r\n reqs = [ call(getAllAgents, forceRefresh, basicInfo), call(getAllAgencies, forceRefresh, basicInfo), ]\r\n const canSelectLandowner = yield select(userCanSelectPermitLandowner)\r\n if (canSelectLandowner) {\r\n reqs.push(call(getAllLandowners, forceRefresh, basicInfo))\r\n }\r\n }\r\n yield all(reqs)\r\n reqs = []\r\n // Set the ApplicantInfo state slice with the info from the permit\r\n yield call(setApplicantInfo, { BurnPermitId, })\r\n const { landownerId, agentId, agencyId, } = yield select(applInfoStateSelector)\r\n if (landownerId && landownerId > 0) {\r\n reqs.push(call(getPerson, { personId: landownerId, activeOnly, }))\r\n }\r\n if (agentId && agentId > 0) {\r\n reqs.push(call(getAgentInfo, { personId: agentId, activeOnly, }))\r\n }\r\n if (agencyId && agencyId > 0) {\r\n reqs.push(call(setSelectedAgency))\r\n }\r\n yield all(reqs)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield all([\r\n call(hideLoading),\r\n put({ type: ApplicantInfoTypes.SET_APPLICANT_SECTION_LOADING, loading: false, }),\r\n ])\r\n }\r\n}\r\n\r\n\r\nfunction* setApplicantInfo ({ BurnPermitId, }) {\r\n const burnPermit = yield select(modelByIdSelector, { modelName: BURN_PERMIT_MODEL_NAME, modelId: BurnPermitId, })\r\n if (burnPermit) {\r\n const applicantInfo = {\r\n mailToAgent: burnPermit.MailPermitToAgentFlag,\r\n }\r\n if (burnPermit.BurnerId) {\r\n applicantInfo.landownerId = burnPermit.BurnerId\r\n }\r\n if (burnPermit.AgentId) {\r\n applicantInfo.agentId = burnPermit.AgentId\r\n }\r\n if (burnPermit.AgencyId) {\r\n applicantInfo.agencyId = burnPermit.AgencyId\r\n }\r\n yield put({ type: ApplicantInfoTypes.SET_SELECTED_APPLICANT_INFO, applicantInfo, })\r\n }\r\n}\r\n\r\n\r\n\r\nfunction* updateApplicantInfo ({ info, }) {\r\n const { online, } = yield select(networkStateSelector)\r\n const { BurnPermitId, } = info\r\n const localBurnPermit = yield select(modelByIdSelector, { modelName: BURN_PERMIT_MODEL_NAME, modelId: BurnPermitId, })\r\n const burnPermit = {\r\n ...localBurnPermit._fields,\r\n BurnPermitId,\r\n MailPermitToLandownerFlag : info.MailPermitToLandownerFlag,\r\n BurnerId : info.BurnerId,\r\n BurnerPermitAddressId : info.BurnerPermitAddressId,\r\n BurnerPermitPrimaryPhoneId : info.BurnerPermitPrimaryPhoneId,\r\n BurnerPermitSecondaryPhoneId : info.BurnerPermitSecondaryPhoneId,\r\n MailPermitToAgentFlag : info.MailPermitToAgentFlag,\r\n AgencyId : info.AgencyId,\r\n AgentId : info.AgentId,\r\n AgentPermitAddressId : info.AgentPermitAddressId,\r\n AgentPermitPrimaryPhoneId : info.AgentPermitPrimaryPhoneId,\r\n AgentPermitSecondaryPhoneId : info.AgentPermitSecondaryPhoneId,\r\n }\r\n if (!localBurnPermit.IsLocal) {\r\n const url = `${BURN_PERMIT_ENDPOINT}/ApplicantInfo`\r\n if (!online) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : ApiTypes.UPDATE_RECORD_REQUEST,\r\n url : url,\r\n method : 'PUT',\r\n keyName : BurnPermit.options.idAttribute,\r\n keyValue : burnPermit.BurnPermitId,\r\n })\r\n }\r\n\r\n yield put(ApiActions.updateRecordRequest(BURN_PERMIT_MODEL_NAME, url, burnPermit, online))\r\n }\r\n if (!online) {\r\n const updatedPermitInfo = yield call(updateLocalModel, BURN_PERMIT_MODEL_NAME, BurnPermitId, burnPermit)\r\n // update local search result so the My Permits and Search results show the pending updates\r\n const updateSearchObj = {}\r\n if (updatedPermitInfo.Burner) {\r\n updateSearchObj.Landowner = updatedPermitInfo.Burner.toString()\r\n }\r\n if (updatedPermitInfo.Agent) {\r\n updateSearchObj.Agent = updatedPermitInfo.Agent.toString()\r\n }\r\n if (updatedPermitInfo.Agency) {\r\n updateSearchObj.Agency = updatedPermitInfo.Agency.toString()\r\n }\r\n \r\n yield call(updateLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, BurnPermitId, updateSearchObj)\r\n }\r\n}\r\n\r\nfunction* setSelectedAgency () {\r\n const { online, } = yield select(networkStateSelector)\r\n const { agencyId, } = yield select(applInfoStateSelector)\r\n if (!online || !agencyId || agencyId < 1) {\r\n return\r\n }\r\n // Get the full set of data so we get the email, address, and phone IDs\r\n yield call(fetchAgencyData, { agencyId, basicInfo: false, })\r\n}\r\n\r\nfunction* setSelectedAgent ({ personId, }) {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online || !personId || personId === -1) {\r\n return\r\n }\r\n yield call(getPerson, { personId, activeOnly: true, })\r\n}\r\n\r\nfunction* setSelectedLandowner ({ personId, }) {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online || !personId || personId === -1) {\r\n return\r\n }\r\n yield call(getPerson, { personId, activeOnly: true, })\r\n}\r\n\r\nexport const BurnPermitApplicantInfoSagas = [\r\n takeLatest(ApplicantInfoTypes.SET_SELECTED_AGENCY_ID, setSelectedAgency),\r\n takeLatest(ApplicantInfoTypes.SET_SELECTED_AGENT_ID, setSelectedAgent),\r\n takeLatest(ApplicantInfoTypes.SET_SELECTED_LANDOWNER_ID, setSelectedLandowner),\r\n takeLatest(ApplicantInfoTypes.UPDATE_APPLICANT_INFO, updateApplicantInfo),\r\n takeLatest(ApplicantInfoTypes.GET_APPLICANT_INFO_DATA, getApplicantInfoData),\r\n takeLatest(ApplicantInfoTypes.SET_APPLICANT_INFO, setApplicantInfo),\r\n takeLatest(BurnPermitFormTypes.ACTIVE_BURN_PERMIT, setApplicantInfo),\r\n]","// Libraries\nimport { call, all, } from 'redux-saga/effects'\n\n// Sagas\nimport { showLoading, hideLoading, } from './AppSagas'\nimport { showError, } from './ApiSagas'\n\n/**\n * Abstract function generator to execute function generators within a try/catch/finally\n * block while also executing the `ApiRedux.SHOW_LOADING` and `ApiRedux.HIDE_LOADING` actions\n * @generator\n * @param {GeneratorFunction} mainSaga\n * @param {GeneratorFunction?} catchSagas\n * @param {GeneratorFunction?} finallySagas\n */\nexport function* execWithLoading (mainSaga, catchSagas = null, finallySagas = null, disableLoading = false) {\n try {\n if (!disableLoading) {\n yield call(showLoading)\n }\n yield mainSaga()\n }\n catch (error) {\n if (catchSagas) {\n yield all(catchSagas)\n }\n yield call(showError, error)\n }\n finally {\n if (finallySagas) {\n yield all(finallySagas)\n }\n if (!disableLoading) {\n yield call(hideLoading)\n }\n }\n}","import { createSelector, } from 'reselect'\r\nimport { activeBurnPermitIdSelector, } from './burnPermitSelectors'\r\nimport { ormSelector, ormWithPropSelector, ormByIdSelector, } from './selectors'\r\n\r\n\r\nconst orderStateSelector = state => state.BurnPermitOrder || {}\r\n\r\nexport const newBurnPermitOrderId = createSelector(\r\n orderStateSelector,\r\n orderState => orderState.newBurnPermitOrderId\r\n)\r\n\r\nconst mapBurnPermitOrderXref = (xref) => {\r\n if (!xref) {\r\n return null\r\n }\r\n return {\r\n BurnPermitOrderId : xref.BurnPermitOrderId || '',\r\n BurnPermitId : xref.BurnPermitId || '',\r\n BurnPermitOrderXrefId : xref.BurnPermitOrderXrefId || '',\r\n RegionName : xref.RegionName || '',\r\n BurnPermitNumber : xref.BurnPermitNumber || '',\r\n CreateBy : xref.CreateBy || '',\r\n CreateDate : xref.CreateDate || '',\r\n UpdateBy : xref.UpdateBy || '',\r\n UpdateDate : xref.UpdateDate || '',\r\n Tonnage : xref.BurnPermit ? xref.BurnPermit.TotalPermitTonnage : 0,\r\n }\r\n}\r\n\r\nconst mapApplicationDetail = (appDetail) => {\r\n if (!appDetail) {\r\n return null\r\n }\r\n return {\r\n CheckNumber : appDetail.CheckNumber || '',\r\n FirstName : appDetail.FirstName || '',\r\n LastName : appDetail.LastName || '',\r\n PaymentAmount : appDetail.PaymentAmount || '',\r\n PaymentCommandCode : appDetail.PaymentCommandCode || '',\r\n PaymentMethod : appDetail.PaymentMethod || '',\r\n TransactionDate : appDetail.TransactionDate || '',\r\n VoucherNumber : appDetail.VoucherNumber || '',\r\n Comment : appDetail.Comment || '',\r\n }\r\n}\r\n\r\nconst mapOrderStrings = (xrefs) => {\r\n let regionString = '', permitNumberString = ''\r\n if (xrefs && xrefs.exists()){\r\n if (xrefs.count() === 1) {\r\n const { BurnPermitNumber, RegionName, } = xrefs.first()\r\n return { permitNumberString: BurnPermitNumber || '', regionString: RegionName || '', } \r\n }\r\n xrefs.toRefArray().forEach(({ RegionName, BurnPermitNumber, }) => {\r\n if (RegionName && RegionName.length > 0 && RegionName !== '') {\r\n if (regionString === '') {\r\n regionString = RegionName\r\n }\r\n // Only display distinct Region Names\r\n else if (regionString.indexOf(RegionName) < 0) {\r\n regionString = regionString + ', ' + RegionName\r\n }\r\n }\r\n \r\n if (BurnPermitNumber && BurnPermitNumber.length > 0 && BurnPermitNumber !== '') {\r\n if (permitNumberString === '') {\r\n permitNumberString = BurnPermitNumber\r\n } else {\r\n permitNumberString = permitNumberString + ', ' + BurnPermitNumber\r\n }\r\n }\r\n })\r\n }\r\n return { regionString, permitNumberString, }\r\n}\r\n\r\nconst mapOrder = (order) => {\r\n if (!order) {\r\n return null\r\n }\r\n let xrefs = [], orderStrings = { regionString: '', permitNumberString: '', }\r\n if (order.BurnPermitOrderXrefs && order.BurnPermitOrderXrefs.exists()) {\r\n xrefs = order.BurnPermitOrderXrefs.toModelArray().map(mapBurnPermitOrderXref)\r\n orderStrings = mapOrderStrings(order.BurnPermitOrderXrefs)\r\n }\r\n return {\r\n ApplicationDetail : mapApplicationDetail(order.ApplicationDetail),\r\n AuthorizationCode : order.AuthorizationCode || '',\r\n BurnPermitOrderAmount : order.BurnPermitOrderAmount || '',\r\n BurnPermitOrderId : order.BurnPermitOrderId || '',\r\n BurnPermitOrderXref : xrefs,\r\n BurnPermitRegions : orderStrings.regionString,\r\n BurnPermitNumbers : orderStrings.permitNumberString,\r\n CardType : order.CardType || '',\r\n ConfirmationNumber : order.ConfirmationNumber || '',\r\n CreateBy : order.CreateBy || '',\r\n CreateDate : order.CreateDate || '',\r\n EPayResultMessage : order.EPayResultMessage || '',\r\n EPayReturnCode : order.EPayReturnCode || '',\r\n PaymentHash : order.PaymentHash || '',\r\n SettlementSubmissionDate : order.SettlementSubmissionDate || '',\r\n TotalAmountPaid : order.TotalAmountPaid || '',\r\n AllowPayment : order.AllowPayment,\r\n UpdateBy : order.UpdateBy || '',\r\n UpdateDate : order.UpdateDate || '',\r\n TotalTonnage : xrefs.map(x => x.Tonnage).reduce((a, b) => a + b, 0),\r\n BurnPermitOrderVoucher : order.BurnPermitOrderVoucher,\r\n }\r\n}\r\n\r\n\r\nexport const ordersSelector = ormSelector(\r\n ({ BurnPermitOrder, }) => {\r\n return BurnPermitOrder.all()\r\n .orderBy('CreateDate', 'desc')\r\n .toModelArray()\r\n .map(mapOrder)\r\n }\r\n)\r\n\r\nexport const orderHasPaymentSelector = ormByIdSelector(\r\n ({ BurnPermitOrder, }, orderId) => {\r\n if (isNaN(orderId)) {\r\n return false\r\n }\r\n const order = BurnPermitOrder.withId(orderId)\r\n if (!order) {\r\n return false\r\n }\r\n return !!order.PaymentHash\r\n }\r\n)\r\n\r\nexport const orderByIdSelector = ormByIdSelector(\r\n ({ BurnPermitOrder, }, orderId) => {\r\n if (isNaN(orderId)) {\r\n return null\r\n }\r\n const order = BurnPermitOrder.withId(orderId)\r\n if (!order) {\r\n return null\r\n }\r\n return mapOrder(order)\r\n }\r\n)\r\n\r\nexport const orderByPermitIdsSelector = ormWithPropSelector(\r\n ({ BurnPermitOrder, }, BurnPermitIds) => {\r\n const order = BurnPermitOrder.all()\r\n .toModelArray()\r\n .filter(o => o.BurnPermitOrderXref\r\n .filter(x => (BurnPermitIds || []).includes(x.BurnPermitId)).count() > 0\r\n )[0]\r\n return mapOrder(order)\r\n }\r\n)\r\n\r\nexport const orderIdForActivePermitSelector = ormSelector(\r\n activeBurnPermitIdSelector,\r\n ({ BurnPermitOrderXref, }, BurnPermitId) => {\r\n const order = BurnPermitOrderXref.all()\r\n .toModelArray()\r\n .filter(x => x.BurnPermitId === BurnPermitId)[0]\r\n if (order) {\r\n return order.BurnPermitOrderId\r\n }\r\n return null\r\n }\r\n)\r\n\r\nexport const permitsByOrderId = ormByIdSelector(\r\n ({ BurnPermit, BurnPermitOrder, }, BurnPermitOrderId) => {\r\n if (isNaN(BurnPermitOrderId)) {\r\n return []\r\n }\r\n const order = BurnPermitOrder.withId(BurnPermitOrderId)\r\n if (!order || order.BurnPermits === null) {\r\n return []\r\n }\r\n\r\n const permitIds = order.BurnPermitOrderXref.toRefArray().map(x => x.BurnPermitId)\r\n const permits = BurnPermit\r\n .filter(p => permitIds.includes(p.BurnPermitId))\r\n .toRefArray()\r\n return permits\r\n }\r\n)\r\n\r\n\r\nexport const orderHasIssuedPermit = ormByIdSelector(\r\n ({ BurnPermitOrder, BurnPermitStatus, BurnPermitStatusXref, }, BurnPermitOrderId) => {\r\n if (isNaN(BurnPermitOrderId)) {\r\n return false\r\n }\r\n const order = BurnPermitOrder.withId(BurnPermitOrderId)\r\n if (!order || order.BurnPermits === null) {\r\n return false\r\n }\r\n if (!BurnPermitStatus.filter({ BurnPermitStatusName: 'Issued', }).exists()) {\r\n return false\r\n }\r\n\r\n const permitStatusIds = order.BurnPermitOrderXref.toRefArray().map(x => {\r\n const permitStatus = BurnPermitStatusXref\r\n .filter({ BurnPermitId: x.BurnPermitId, })\r\n .orderBy('CreateDate', 'desc')\r\n .first()\r\n if (permitStatus) {\r\n return permitStatus.BurnPermitStatusId\r\n }\r\n return -1\r\n })\r\n const issuedStatusId = BurnPermitStatus.filter({ BurnPermitStatusName: 'Issued', }).first().BurnPermitStatusId\r\n return permitStatusIds.includes(issuedStatusId)\r\n }\r\n)\r\n\r\n\r\nexport const orderEligibleForVoucherPayment = ormByIdSelector(\r\n ({ BurnPermit, BurnPermitOrder, }, BurnPermitOrderId) => {\r\n if (isNaN(BurnPermitOrderId)) {\r\n return false\r\n }\r\n const order = BurnPermitOrder.withId(BurnPermitOrderId)\r\n if (!order || order.BurnPermits === null) {\r\n return false\r\n }\r\n\r\n const permitIds = order.BurnPermitOrderXref.toRefArray().map(x => x.BurnPermitId)\r\n const permits = BurnPermit\r\n .filter(p => permitIds.includes(p.BurnPermitId))\r\n .toModelArray()\r\n const permitsAreEligible = permits.map(p => {\r\n return {\r\n BurnPermitId : p.BurnPermitId,\r\n PaysByVoucher : (\r\n (p.Agent !== null && p.Agent.Agencies.exists() && p.Agent.Agencies.first().PaysByVoucher)\r\n ||\r\n (p.Burner !== null && p.Burner.Agencies.exists() && p.Burner.Agencies.first().PaysByVoucher)\r\n ),\r\n }\r\n }, [])\r\n const allPermitsForVoucherPayingAgencies = permitsAreEligible.every(p => p.PaysByVoucher)\r\n if (allPermitsForVoucherPayingAgencies) {\r\n return true\r\n }\r\n // If some are eligible, but some are not, return the error message\r\n else if (permitsAreEligible.some(p => p.PaysByVoucher) && permitsAreEligible.some(p => !p.PaysByVoucher)) {\r\n return `The following Permits do not belong to an Agency that pays by Voucher: ${permitsAreEligible.filter(p => !p.PaysByVoucher).map(p => p.BurnPermitId, []).join(', ')}`\r\n }\r\n // Otherwise, the permit(s) are not eligible\r\n return null\r\n }\r\n)","// Libraries\r\nimport { put, all, call, takeLatest, select, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { execWithLoading, } from './BaseSagas'\r\nimport { getAgency, } from './AgencySagas'\r\nimport { doFetch, showError, } from './ApiSagas'\r\nimport { getPerson, getAgent, } from './PersonSagas'\r\nimport {\r\n replaceAll,\r\n destroyLocalModel,\r\n destroyLocalModels,\r\n upsertLocalModel,\r\n upsertLocalModels,\r\n} from './OrmSagas'\r\nimport { getBurnPermit, getBurnPermitStatusHistory, } from './BurnPermitSagas'\r\nimport { getBurnPermitSiteInfo, } from './BurnPermitSiteSagas'\r\n\r\n// Reducers\r\nimport { UiTypes, } from '../redux/UiRedux'\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { OrmTypes, } from '../redux/OrmRedux'\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport { CartTypes, } from '../redux/CartRedux'\r\nimport { BurnPermitOrderTypes, } from '../redux/BurnPermitOrderRedux'\r\nimport { BurnPermitInstructionsTypes, } from '../redux/BurnPermitInstructionsRedux'\r\n\r\n// Models\r\nimport BurnPermitOrder from '../models/BurnPermitOrder'\r\n\r\n// Selectors\r\nimport {\r\n checkAllPermitsBelongToSameBurnerOrAgent,\r\n permitsByIds,\r\n hasIssuedPermits,\r\n permitByIdIsSubmitted,\r\n permitApplicationIsPaid,\r\n} from '../selectors/burnPermitSelectors'\r\nimport { orderByPermitIdsSelector, } from '../selectors/orderSelectors'\r\n\r\n// Constants\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\nconst BURN_PERMIT_ORDER_ENDPOINT = `${REACT_APP_SERVER_URL}${BurnPermitOrder.endpoint()}`\r\n\r\n/**\r\n * Submits a request to retrieve and update the user's Burn Permit Orders\r\n */\r\nexport function* getBurnPermitOrders () {\r\n yield execWithLoading(function* () {\r\n const burnPermitsOrdersResp = yield call(doFetch, BURN_PERMIT_ORDER_ENDPOINT)\r\n\r\n if (burnPermitsOrdersResp.ok !== true || !burnPermitsOrdersResp.responseBody) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'An error occurred retrieving your Burn Permit Orders.', })\r\n return\r\n }\r\n // Extract the Xrefs so we can update the ORM with them properly\r\n let BurnPermitOrderXrefs = []\r\n for (let i = 0, len = burnPermitsOrdersResp.responseBody.length; i < len; i++) {\r\n const order = burnPermitsOrdersResp.responseBody[i]\r\n BurnPermitOrderXrefs = BurnPermitOrderXrefs.concat(order.BurnPermitOrderXref)\r\n delete order.BurnPermitOrderXref\r\n }\r\n // Clear out what's in the local store then write in the response from the server\r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n modelName : 'BurnPermitOrder',\r\n objects : burnPermitsOrdersResp.responseBody,\r\n })\r\n\r\n yield call(replaceAll, 'BurnPermitOrderXref', BurnPermitOrderXrefs)\r\n })\r\n}\r\n\r\n/**\r\n * Submits a request to retrieve and update the user's Burn Permit Orders\r\n */\r\nexport function* getOrderForBurnPermit ({ burnPermitId, disableLoading = false, }) {\r\n yield execWithLoading(function* () {\r\n const burnPermitsOrdersResp = yield call(doFetch, `${BURN_PERMIT_ORDER_ENDPOINT}?permitId=${burnPermitId}`)\r\n\r\n if (burnPermitsOrdersResp.ok !== true) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'An error occurred retrieving your Burn Permit Order.', })\r\n return\r\n }\r\n\r\n if (burnPermitsOrdersResp.responseBody.length) {\r\n const [ order, ] = burnPermitsOrdersResp.responseBody\r\n const xrefs = order.BurnPermitOrderXref\r\n .map(x => {\r\n return {\r\n BurnPermitOrderXrefId : x.BurnPermitOrderXrefId,\r\n BurnPermitOrderId : x.BurnPermitOrderId,\r\n BurnPermitId : x.BurnPermitId,\r\n }\r\n })\r\n yield call(upsertLocalModels, 'BurnPermitOrderXref', xrefs)\r\n delete order.BurnPermitOrderXref\r\n yield call(upsertLocalModel, 'BurnPermitOrder', order)\r\n }\r\n else {\r\n const localOrder = yield select(orderByPermitIdsSelector, [ parseInt(burnPermitId), ])\r\n if (localOrder) {\r\n yield call(destroyLocalModel, 'BurnPermitOrder', localOrder.BurnPermitOrderId)\r\n }\r\n }\r\n }, null, null, disableLoading)\r\n}\r\n\r\nexport function* getBurnPermitDetailForCart ({ burnPermitId, }) {\r\n yield execWithLoading(function* () {\r\n const permitResp = yield call(getBurnPermit, { burnPermitId, })\r\n if (!permitResp || !permitResp.ok) {\r\n yield put({ type: ApiTypes.FAILURE, error: `An error occurred retrieving Burn Permit Details for Permit ${burnPermitId}. Either it does not exist or you do not have access.`, })\r\n return\r\n }\r\n \r\n const siteInfoResp = yield call(getBurnPermitSiteInfo, { burnPermitSiteId: permitResp.responseBody.BurnPermitSiteId, })\r\n if (!siteInfoResp || !siteInfoResp.BurnPermitSiteId) {\r\n yield put({ type: ApiTypes.FAILURE, error: `An error occurred retrieving Burn Permit Site Info Details for Permit ${burnPermitId}. Either it does not exist or you do not have access.`, })\r\n return\r\n }\r\n \r\n const { BurnerId, AgentId, AgencyId, } = permitResp.responseBody\r\n\r\n if (BurnerId) {\r\n const burnerResp = yield call(getPerson, { personId: BurnerId, })\r\n if (!burnerResp || !burnerResp.ok) {\r\n yield put({ type: ApiTypes.FAILURE, error: `An error occurred retrieving Burn Permit Landowner Info Details for Permit ${burnPermitId}. Either it does not exist or you do not have access.`, })\r\n return\r\n }\r\n }\r\n \r\n if (AgentId) {\r\n const agentResp = yield call(getAgent, { personId: AgentId, })\r\n if (!agentResp || !agentResp.ok) {\r\n yield put({ type: ApiTypes.FAILURE, error: `An error occurred retrieving Burn Permit Agent Info Details for Permit ${burnPermitId}. Either it does not exist or you do not have access.`, })\r\n return\r\n }\r\n }\r\n\r\n if (AgencyId) {\r\n const agencyResp = yield call(getAgency, AgencyId, false)\r\n if (!agencyResp || !agencyResp.ok) {\r\n yield put({ type: ApiTypes.FAILURE, error: `An error occurred retrieving Burn Permit Agency Info Details for Permit ${burnPermitId}. Either it does not exist or you do not have access.`, })\r\n return\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport function* getBurnPermitOrderDetail ({ burnPermitOrderId, }) {\r\n yield execWithLoading(function* () {\r\n\r\n const resp = yield call(doFetch, `${BURN_PERMIT_ORDER_ENDPOINT}/${burnPermitOrderId}`)\r\n\r\n if (resp.ok !== true) {\r\n yield put({ type: ApiTypes.FAILURE, error: `An error occurred retrieving Burn Permit Order ${burnPermitOrderId}. Either it does not exist or you do not have access.`, })\r\n return\r\n }\r\n \r\n const { responseBody: Order, } = resp\r\n const BurnPermitOrderXrefs = Order.BurnPermitOrderXref.map(x => {\r\n return {\r\n BurnPermitId : x.BurnPermitId,\r\n BurnPermitOrderId : x.BurnPermitOrderId,\r\n BurnPermitOrderXrefId : x.BurnPermitOrderXrefId,\r\n CreateBy : x.CreateBy,\r\n CreateDate : x.CreateDate,\r\n UpdateBy : x.UpdateBy,\r\n UpdateDate : x.UpdateDate,\r\n }\r\n })\r\n const permitIds = []\r\n const permitReqs = [], secondaryReqs = []\r\n for (let x = 0, len = BurnPermitOrderXrefs.length; x < len; x ++) {\r\n const burnPermitId = BurnPermitOrderXrefs[x].BurnPermitId\r\n permitIds.push(burnPermitId)\r\n permitReqs.push(call(getBurnPermit, { burnPermitId, }))\r\n secondaryReqs.push(call(getBurnPermitSiteInfo, { burnPermitSiteId: burnPermitId, }))\r\n secondaryReqs.push(call(getBurnPermitStatusHistory, { burnPermitId, }))\r\n }\r\n yield all(permitReqs)\r\n yield all(secondaryReqs)\r\n const permits = yield select(permitsByIds, permitIds)\r\n let personIds = new Set()\r\n for (let i = 0, len = permits.length; i < len; i++) {\r\n const { BurnerId, AgentId, } = permits[i]\r\n if (BurnerId) {\r\n personIds.add(BurnerId)\r\n }\r\n if (AgentId) {\r\n personIds.add(AgentId)\r\n }\r\n }\r\n personIds = [ ...personIds, ]\r\n const personReqs = []\r\n for (let b = 0, bLen = personIds.length; b < bLen; b++) {\r\n personReqs.push(call(getPerson, { personId: personIds[b], includeLookupData: false, }))\r\n }\r\n yield all(personReqs)\r\n\r\n yield call(replaceAll, 'BurnPermitOrderXref', [ ...BurnPermitOrderXrefs, ], { BurnPermitOrderId: burnPermitOrderId, })\r\n delete Order.BurnPermitOrderXref\r\n yield put({\r\n type : OrmTypes.UPSERT,\r\n modelName : 'BurnPermitOrder',\r\n properties : Order,\r\n })\r\n })\r\n}\r\n\r\nexport function* createBurnPermitOrder ({ BurnPermitIds, }) {\r\n yield execWithLoading(function* () {\r\n const permitAppsOnOrder = yield all(BurnPermitIds.map(id => select(permitApplicationIsPaid, id)))\r\n if (yield select(hasIssuedPermits, BurnPermitIds) && permitAppsOnOrder.some(o => o)) {\r\n const error = 'Cannot create order with Permits that are already Issued and paid for. Remove them from the order then try again.'\r\n yield put({ type: ApiTypes.FAILURE, error, })\r\n return\r\n }\r\n\r\n // Call selector to validate all BurnPermitIds have the same BurnerID or AgentID\r\n // Returns nullable bools\r\n // If `true` for either, the permits are valid\r\n // If `false` for either, the permits are not valid\r\n // If `null` for either, the information is not set\r\n // If neither one are `true`, return an error\r\n const { allSameBurner, allSameAgent, } = yield select(checkAllPermitsBelongToSameBurnerOrAgent, BurnPermitIds)\r\n if (allSameBurner !== true && allSameAgent !== true) {\r\n const error = `Cannot create Burn Permit Order. One or more Permits belong to different ${allSameBurner === false ? 'Burners' : 'Agents'}`\r\n yield put({ type: ApiTypes.FAILURE, error, })\r\n return\r\n }\r\n\r\n const resp = yield call(doFetch, BURN_PERMIT_ORDER_ENDPOINT, { method: 'POST', body: { BurnPermitIds, }, })\r\n\r\n if (resp.ok !== true) {\r\n let error = 'An error occurred attempting to create an Order for the selected Permit(s).'\r\n if (!resp.responseBody && resp.responseBody.status === 401) {\r\n error = 'You are not authorized to create an Order for the selected Permit(s)'\r\n }\r\n else {\r\n error = resp.responseBody\r\n }\r\n yield put({ type: ApiTypes.FAILURE, error, })\r\n return\r\n }\r\n const BurnPermitOrderXrefs = resp.responseBody.BurnPermitOrderXref.map(x => {\r\n return {\r\n BurnPermitId : x.BurnPermitId,\r\n BurnPermitOrderId : x.BurnPermitOrderId,\r\n BurnPermitOrderXrefId : x.BurnPermitOrderXrefId,\r\n CreateBy : x.CreateBy,\r\n CreateDate : x.CreateDate,\r\n UpdateBy : x.UpdateBy,\r\n UpdateDate : x.UpdateDate,\r\n }\r\n })\r\n delete resp.responseBody.BurnPermitOrderXref\r\n yield all([\r\n put({\r\n type : OrmTypes.UPSERT,\r\n modelName : 'BurnPermitOrder',\r\n properties : resp.responseBody,\r\n }),\r\n call(replaceAll, 'BurnPermitOrderXref', BurnPermitOrderXrefs),\r\n put({\r\n type : BurnPermitOrderTypes.SET_NEW_ORDER_ID,\r\n burnPermitOrderId : resp.responseBody.BurnPermitOrderId,\r\n }),\r\n put({ type: CartTypes.EMPTY_CART, }),\r\n ])\r\n })\r\n}\r\n\r\nexport function* updateBurnPermitOrder ({ burnPermitOrder, }) {\r\n yield execWithLoading(function* () {\r\n\r\n const resp = yield call(doFetch, `${BURN_PERMIT_ORDER_ENDPOINT}/${burnPermitOrder.BurnPermitOrderId}`, { method: 'PUT', body: burnPermitOrder, })\r\n\r\n if (resp.ok !== true) {\r\n let error = 'An error occurred updating the Burn Permit Order.'\r\n if ('responseBody' in resp) {\r\n if ('error' in resp.responseBody) {\r\n error = resp.responseBody\r\n }\r\n else if ('errors' in resp.responseBody) {\r\n error = Object.values(resp.responseBody.errors).join('\\n')\r\n }\r\n }\r\n yield call(showError, error)\r\n return\r\n }\r\n\r\n const reqs = [\r\n put({ type: AppTypes.SHOW_SUCCESS, }),\r\n call(getBurnPermitOrderDetail, { burnPermitOrderId: burnPermitOrder.BurnPermitOrderId, }),\r\n ]\r\n let burnPermitId\r\n for (let i = 0, len = burnPermitOrder.BurnPermitIds.length; i < len; i++) {\r\n burnPermitId = burnPermitOrder.BurnPermitIds[i]\r\n reqs.push(put({\r\n type : BurnPermitInstructionsTypes.GO_TO_INSTRUCTION_STEP,\r\n step : 'Review',\r\n burnPermitId,\r\n completedSteps : [ 'Apply', 'Sign', 'Pay', ],\r\n }))\r\n const isSubmitted = yield select(permitByIdIsSubmitted, burnPermitId)\r\n if (isSubmitted) {\r\n reqs.push(put({ type: UiTypes.OPEN_MODAL, modalKey: 'APPLICATION_NEXT_STEPS', }))\r\n }\r\n }\r\n yield all(reqs)\r\n })\r\n}\r\n\r\nfunction* removePermitFromOrder ({ orderId, permitId, }) {\r\n const finallySagas = [ put({ type: UiTypes.CLOSE_MODAL, }), ]\r\n yield execWithLoading(function* () {\r\n\r\n const resp = yield call(doFetch, `${BURN_PERMIT_ORDER_ENDPOINT}/${orderId}/Permit/${permitId}`, { method: 'DELETE', })\r\n\r\n if (resp.ok !== true) {\r\n const error = resp.responseBody ? resp.responseBody.error : 'An error occurred updating the Burn Permit Order.'\r\n yield call(showError, error)\r\n return\r\n }\r\n yield all([\r\n put({ type: AppTypes.SHOW_SUCCESS, }),\r\n // get new details to remove the previously associated application as well as\r\n // to show the possibly new fee\r\n call(getBurnPermitOrderDetail, { burnPermitOrderId: orderId, }),\r\n ])\r\n }, null, finallySagas)\r\n}\r\n\r\nfunction* deleteOrder ({ orderId, }) {\r\n const finallySagas = [ put({ type: UiTypes.CLOSE_MODAL, }), ]\r\n yield execWithLoading(function* () {\r\n\r\n const resp = yield call(doFetch, `${BURN_PERMIT_ORDER_ENDPOINT}/${orderId}`, { method: 'DELETE', })\r\n\r\n if (resp.ok !== true) {\r\n const error = resp.responseBody ? resp.responseBody.error : 'An error occurred deleting the Burn Permit Order.'\r\n yield call(showError, error)\r\n return\r\n }\r\n \r\n yield all([\r\n put({ type: AppTypes.SHOW_SUCCESS, }),\r\n call(destroyLocalModels, 'BurnPermitOrderXref', { BurnPermitOrderId: orderId, }),\r\n call(destroyLocalModel, 'BurnPermitOrder', orderId),\r\n ])\r\n }, null, finallySagas)\r\n}\r\n\r\n\r\nexport const BurnPermitOrderSagas = [\r\n takeLatest(BurnPermitOrderTypes.GET_ORDERS, getBurnPermitOrders),\r\n takeLatest(BurnPermitOrderTypes.CREATE_BURN_PERMIT_ORDER, createBurnPermitOrder),\r\n takeLatest(BurnPermitOrderTypes.GET_BURN_PERMIT_DETAIL_FOR_CART, getBurnPermitDetailForCart),\r\n takeLatest(BurnPermitOrderTypes.GET_BURN_PERMIT_ORDER_DETAIL, getBurnPermitOrderDetail),\r\n takeLatest(BurnPermitOrderTypes.UPDATE_BURN_PERMIT_ORDER, updateBurnPermitOrder),\r\n takeLatest(BurnPermitOrderTypes.REMOVE_PERMIT_FROM_ORDER, removePermitFromOrder),\r\n takeLatest(BurnPermitOrderTypes.DELETE_ORDER, deleteOrder),\r\n]","import { createSelector, } from 'reselect'\nimport { REACT_APP_VERSION, } from './env'\n\n/*** State Selectors */\n\nconst appState = state => state.app\n\nexport const appStateSelector = createSelector(\n appState,\n state => {\n return {\n ...state,\n HistoryLength: state.historyLength || 5,\n }\n }\n)\n\nexport const lastRouteSelector = createSelector(\n appState,\n state => {\n const routeEntry = state.routeHistory[1]\n if (routeEntry && routeEntry.route) {\n return routeEntry.route\n }\n return '/' // Default to the home page\n }\n)\n\nexport const appVersionSelector = createSelector(\n appState,\n (state) => {\n const { version, } = state\n if (version !== REACT_APP_VERSION) {\n return ''\n }\n return version\n }\n)\n\nexport const appHistorySelector = createSelector(\n appState,\n state => {\n return state.routeHistory\n }\n)\n\nexport const returnUrlSelector = createSelector(\n appState,\n state => {\n return state.returnUrl\n }\n)\n","// Libraries\nimport { put, select, call, all, fork, spawn, takeEvery, takeLatest, } from 'redux-saga/effects'\nimport { isEmpty, } from 'lodash'\n\n// Sagas\nimport { getLookupData, doFetch, showError, extractPayload, } from './ApiSagas'\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { createLocalModel, destroyLocalModel, upsertLocalModels, destroyLocalModels, serverHasNewerData, replaceAll, upsertLocalModel, } from './OrmSagas'\nimport { uploadFiles, downloadFile, } from './FileSagas'\nimport { downloadBurnPermitAreaInfo, submitOfflineAreaEdits, } from './BurnPermitAreaSagas'\nimport { downloadBurnLocationInfo, submitOfflineLocationEdits, } from './BurnPermitLocationSagas'\nimport { getBurnPermitSignatures, downloadBurnPermitSignatures, } from './BurnPermitSignatureSagas'\nimport { downloadBurnPermitFuelsInfo, submitOfflineFuelsEdits, } from './BurnPermitFuelsSagas'\nimport { downloadPileInfo, submitOfflinePileEdits, } from './BurnPermitPileGroupSagas'\nimport { downloadPermitConditions, } from './BurnPermitConditionSagas'\nimport { downloadBurnPermitSiteInfo, submitOfflineSiteEdits, } from './BurnPermitSiteSagas'\nimport { downloadApplicantInfo, } from './BurnPermitApplicantInfoSagas'\nimport { GetAllRegions, } from './RegionSagas'\nimport { getOrderForBurnPermit, } from './BurnPermitOrdersSagas'\n\n// Reducers\nimport ApiActions, { ApiTypes, } from '../redux/ApiRedux'\nimport { AppTypes, } from '../redux/AppRedux'\nimport { FileTypes, } from '../redux/FileRedux'\nimport { mapDataToModel, OrmTypes, } from '../redux/OrmRedux'\nimport { ApplicantInfoTypes, } from '../redux/ApplicantInfoSectionRedux'\nimport BurnPermitFormActions, { BurnPermitFormTypes, } from '../redux/BurnPermitFormRedux'\nimport BurnPermitListActions, { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\nimport { CartTypes, } from '../redux/CartRedux'\nimport { UiTypes, } from '../redux/UiRedux'\nimport { BurnPermitInstructionsTypes, } from '../redux/BurnPermitInstructionsRedux'\nimport { BurnPermitSignatureTypes, } from '../redux/BurnPermitSignatureRedux'\n\n// Models\nimport BurnPermit from '../models/BurnPermit'\nimport BurnPermitArea from '../models/BurnPermitArea'\nimport BurnPermitFuel from '../models/BurnPermitFuel'\nimport BurnPermitLocation from '../models/BurnPermitLocation'\nimport BurnPermitSearch from '../models/BurnPermitSearch'\nimport BurnPermitSite from '../models/BurnPermitSite'\nimport BurnPermitStatusXref from '../models/BurnPermitStatusXref'\nimport BurnPermitApplicationStatusXref from '../models/BurnPermitApplicationStatusXref'\n\n// Selectors\nimport {\n permitByIdSelector,\n networkStateSelector,\n permitApplicationStatuses,\n appIsOnlineSelector,\n} from '../selectors/selectors'\nimport { signatureByPermitId, } from '../selectors/burnPermitSignatureSelectors'\nimport { modelByIdSelector, } from '../selectors/modelSelectors'\nimport { userIsDNR, userNameSelector, userPersonModelSelector, profileStatusSelector, } from '../selectors/userSelectors'\nimport { lastRouteSelector, } from '../selectors/appSelectors'\nimport {\n activeBurnPermitIdSelector,\n documentTypesForSelect,\n permitApplicationDocuments,\n permitApplicationStatus,\n shouldShowApplicationNextSteps,\n shouldShowPermitNextSteps,\n} from '../selectors/burnPermitSelectors'\n\n// Utilities\nimport { dateFormatter, } from '../utilities'\nimport { compareFileNames, } from '../utilities/files'\n\n// Constants\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\nconst BURN_PERMIT_MODEL_NAME = BurnPermit.modelName\nconst BURN_PERMIT_SEARCH_MODEL_NAME = BurnPermitSearch.modelName\n\n\nfunction* createPermitApplication () {\n yield put({ type: ApplicantInfoTypes.RESET_APPLICANT_INFO, })\n const { online, } = yield select(networkStateSelector)\n let localId\n if (!online) {\n const username = yield select(userNameSelector)\n const user = yield select(userPersonModelSelector)\n const profile = yield select(profileStatusSelector)\n \n // Create the related section models before creating the burn permit\n const { BurnPermitLocationId, } = yield call(createLocalModel, BurnPermitLocation.modelName, { CreateBy: username, CreateDate: new Date(), })\n const { BurnPermitAreaId, } = yield call(createLocalModel, BurnPermitArea.modelName, { CreateBy: username, CreateDate: new Date(), })\n const { BurnPermitSiteId, } = yield call(createLocalModel, BurnPermitSite.modelName, { CreateBy: username, CreateDate: new Date(), })\n const { BurnPermitFuelId, } = yield call(createLocalModel, BurnPermitFuel.modelName, { CreateBy: username, CreateDate: new Date(), })\n \n const personInfo = {}\n if (profile.HasAgency) {\n personInfo.AgencyId = user.Agencies.first().AgencyId\n personInfo.AgentId = user.PersonId\n personInfo.MailPermitToAgentFlag = true\n personInfo.MailPermitToLandownerFlag = false\n }\n \n const permitProps = {\n BurnPermitAreaId,\n BurnPermitLocationId,\n BurnPermitSiteId,\n BurnPermitFuelId,\n ...personInfo,\n // LandownerId : user.PersonType === 'Landowner' ? user.PersonType : '',\n CreateBy : username,\n CreateDate : new Date(),\n }\n // Create a local permit with the fks to the section models and some audit data\n const newPermit = yield call(createLocalModel, BURN_PERMIT_MODEL_NAME, permitProps)\n\n const { BurnPermitId, } = newPermit\n localId = BurnPermitId\n\n // Create permit search result record so it's discoverable in the My Permits and Search Permits\n yield call(createLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, { BurnPermitId, BurnPermitApplicationStatus: 'Pending', BurnPermitApplicationStatusDate: new Date(), CreateBy: username, CreateDate: new Date(), })\n\n // Create a pending status record\n const appStatuses = yield select(permitApplicationStatuses)\n const pendingStatusId = appStatuses.filter(s => s.Text === 'Pending')[0].Value\n const pendingStatusXref = {\n BurnPermitId,\n BurnPermitApplicationStatusId : pendingStatusId,\n StatusDate : new Date(),\n Comment : `[SYSTEM] ${username} started the application.`,\n CreateBy : username,\n CreateDate : new Date(),\n }\n yield call(createLocalModel, BurnPermitApplicationStatusXref.modelName, pendingStatusXref)\n\n // Set the new active burn permit id once all the data is created locally\n yield put({ type: BurnPermitFormTypes.ACTIVE_BURN_PERMIT, BurnPermitId, })\n }\n\n // Because the Type for the createPostBurnRequest is declared as part of the custom config,\n // we have to put an action creator rather than put the type in order for redux to pick it up\n yield put(BurnPermitFormActions.createPermitApplicationRequest(localId))\n}\n\n/**\n * Create a new Burn Permit Application\n */\nfunction* createPermitApplicationSuccess (resp) {\n try {\n if (resp.payload && !resp.payload.ok && resp.payload.status === 404) {\n yield put({ type: BurnPermitFormTypes.PERMIT_FAILED_TO_LOAD, })\n return\n }\n const burnPermit = yield call(extractPayload, resp)\n // server IDs for the section models\n const {\n BurnPermitId,\n BurnPermitAreaId,\n BurnPermitLocationId,\n BurnPermitSiteId,\n BurnPermitFuelId,\n } = burnPermit\n\n const { localId, } = resp\n if (Number.isInteger(localId)) {\n // get the local model so we can get the local section models\n const localBurnPermit = yield select(modelByIdSelector, { modelName: BURN_PERMIT_MODEL_NAME, modelId: localId, })\n\n // destroy the local burn permit\n yield call(destroyLocalModel, BURN_PERMIT_MODEL_NAME, localId)\n\n // PUT to the BurnPermit endpoint to set the applicant info\n // Include the new server IDs for the section models to override the local IDs\n const applicantInfo = {\n ...localBurnPermit._fields,\n BurnPermitId,\n BurnPermitAreaId,\n BurnPermitLocationId,\n BurnPermitSiteId,\n BurnPermitFuelId,\n }\n \n // We want this to be a blocking one so it updates the local model on success\n const url = `${BURN_PERMIT_ENDPOINT}/${BurnPermitId}`\n yield put(ApiActions.updateRecordRequest(BURN_PERMIT_MODEL_NAME, url, applicantInfo, true))\n\n // delete local search result, a new one will be returned the next time they return to\n // the my permits or search permits page\n yield call(destroyLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, localId)\n\n // submit the update reqs for each of the sections\n // local section IDs\n const {\n BurnPermitAreaId: localAreaId,\n BurnPermitLocationId: localLocationId,\n BurnPermitSiteId: localSiteId,\n BurnPermitFuelId: localFuelId,\n } = localBurnPermit\n\n // We want to spin off detached tasks so if one fails, it doesn't stop the others from\n // processing or this parent saga\n // see: https://redux-saga.js.org/docs/api/#spawnfn-args\n yield spawn(submitOfflineAreaEdits, localAreaId, BurnPermitAreaId)\n yield spawn(submitOfflineLocationEdits, localLocationId, BurnPermitLocationId)\n yield spawn(submitOfflineSiteEdits, localSiteId, BurnPermitSiteId)\n yield spawn(submitOfflinePileEdits, localId, BurnPermitId)\n yield spawn(submitOfflineFuelsEdits, localFuelId, BurnPermitFuelId)\n }\n \n yield put({ type: BurnPermitFormTypes.ACTIVE_BURN_PERMIT, BurnPermitId, })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\nfunction* getStatusLookupData () {\n // The getLookupData saga will update the ORM for us\n // so we don't need to worry about the response\n yield fork(getLookupData, { modelName: 'BurnPermitStatus', })\n yield fork(getLookupData, { modelName: 'BurnPermitApplicationStatus', })\n}\n\n\n/**\n * Get the Burn Permit Application and Permit Status History for the provided Burn Permit ID.\n * Will also request the lookup data to map the statuses to for the controls\n * @param {object} arg\n * @param {number} arg.burnPermitId\n */\nexport function* getBurnPermitStatusHistory ({ burnPermitId, }) {\n try {\n\n if (!burnPermitId) {\n yield call(showError, 'You must provide a Burn Permit ID in order to retrieve statuses.')\n return\n }\n\n yield fork(getStatusLookupData)\n\n const getHistory = true\n\n // Creates the Burn Permit Status Urls\n const permitStatusHistoryUrl = `${REACT_APP_SERVER_URL}${BurnPermitStatusXref.endpoint(burnPermitId, getHistory)}`\n const applicationStatusHistoryUrl = `${REACT_APP_SERVER_URL}${BurnPermitApplicationStatusXref.endpoint(burnPermitId, getHistory)}`\n\n const {\n permitStatusResponse,\n applicationStatusResponse,\n } = yield all({\n permitStatusResponse : call(doFetch, permitStatusHistoryUrl),\n applicationStatusResponse : call(doFetch, applicationStatusHistoryUrl),\n })\n\n // If it's not an Ok, 200, or 404 response, throw an Error\n // Not all Permit Objects will have a Permit Status\n if (permitStatusResponse.ok === false && permitStatusResponse.statusCode !== 200 && permitStatusResponse.statusCode !== 404) {\n yield call(showError, `An error occurred fetching the Permit Status History for ${burnPermitId}.`)\n }\n\n // If it's not an Ok or 200 response, throw an Error\n // All Permit Objects will have an Application Status\n if (applicationStatusResponse.ok === false && applicationStatusResponse.statusCode !== 200) {\n yield call(showError, `An error occurred fetching the Application Status History for ${burnPermitId}.`)\n }\n \n // Upsert the Burn Permit Statuses\n const serverPermitStatuses = permitStatusResponse.responseBody\n if (permitStatusResponse.ok) {\n // Compare latest status date for each status to status locally\n // If a newer status, then update\n // Otherwise, discard\n let hasNewStatuses = yield call(serverHasNewerData, BurnPermitStatusXref.modelName, { BurnPermitId: burnPermitId, }, serverPermitStatuses)\n if (hasNewStatuses) {\n // Purge the existing Xrefs in case any were deleted server side\n // This would only happen if someone did that directly in the db\n yield call(destroyLocalModels, BurnPermitStatusXref.modelName, { BurnPermitId: burnPermitId, })\n // Upsert the Xrefs, if any\n if (serverPermitStatuses.length) {\n yield call(upsertLocalModels, BurnPermitStatusXref.modelName, serverPermitStatuses)\n }\n }\n }\n \n // Upsert the Burn Permit Application Statuses\n if (applicationStatusResponse.ok) {\n // Compare latest status date for each status to status locally\n // If a newer status, then update\n // Otherwise, discard\n const serverAppStatuses = applicationStatusResponse.responseBody\n let hasNewStatuses = yield call(serverHasNewerData, BurnPermitApplicationStatusXref.modelName, { BurnPermitId: burnPermitId, }, serverAppStatuses)\n if (hasNewStatuses) {\n // Purge the existing Xrefs in case any were deleted server side\n // This would only happen if someone did that directly in the db\n yield call(destroyLocalModels, BurnPermitApplicationStatusXref.modelName, { BurnPermitId: burnPermitId, })\n // Upsert the Xrefs\n yield call(upsertLocalModels, BurnPermitApplicationStatusXref.modelName, serverAppStatuses)\n }\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n\nfunction* downloadBurnPermitStatusHistory () {\n try {\n const permitStatusResponse = yield call(doFetch, `${BURN_PERMIT_ENDPOINT}/StatusHistory/Download`)\n // If it's not an Ok, 200, or 404 response, throw an Error\n // Not all Permit Objects will have a Permit Status\n if (permitStatusResponse.ok === false && permitStatusResponse.statusCode !== 200 && permitStatusResponse.statusCode !== 404) {\n yield call(showError, 'An error occurred downloading the Permit Status Histories')\n return\n }\n\n const {\n appStatuses,\n permitStatuses,\n } = permitStatusResponse.responseBody\n\n yield all([\n put({ type: OrmTypes.UPSERT_RANGE, modelName: 'BurnPermitStatusXref', records: permitStatuses, }),\n put({ type: OrmTypes.UPSERT_RANGE, modelName: BurnPermitApplicationStatusXref.modelName, records: appStatuses, }),\n ])\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'StatusHistory', status: true, })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n/**\n * Submits a Status change for a Burn Permit\n */\nexport function* submitApplicationStatus ({ statusValues, }) {\n try {\n \n if (isNaN(parseInt(statusValues.BurnPermitId))) {\n yield call(showError, 'You must supply a Burn Permit ID to submit an Application Status change.')\n return\n }\n if (isNaN(parseInt(statusValues.BurnPermitApplicationStatusId))) {\n yield call(showError, 'You must supply a Burn Permit Application Status ID to submit an Application Status change.')\n return\n }\n\n const requestObj = {\n method : 'POST',\n body : statusValues,\n }\n\n const putAppStatusUrl = `${REACT_APP_SERVER_URL}${BurnPermitApplicationStatusXref.endpoint(statusValues.BurnPermitId)}`\n\n const applicationStatusResponse = yield call(doFetch, putAppStatusUrl, requestObj)\n \n if (applicationStatusResponse.ok !== true) {\n let { error, errors, } = applicationStatusResponse.responseBody\n if (!error && Array.isArray(errors)) {\n error = errors.join('\\r\\n')\n }\n yield call(showError, error || 'An error occurred while attempting to change the Application Status.')\n return\n }\n\n // Upsert the Burn Permit Application Status if there is one\n \n // Map only the values the client model knows about\n const burnPermitApplicationStatus = mapDataToModel(BurnPermitApplicationStatusXref, applicationStatusResponse.responseBody, false)\n // Upsert the Xref\n yield put({\n type : 'UPSERT',\n modelName : BurnPermitApplicationStatusXref.modelName,\n properties : burnPermitApplicationStatus,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n/**\n * Delete an application status change for a Burn Permit\n */\nexport function* deleteApplicationStatus ({ BurnPermitId, BurnPermitApplicationStatusXrefId, }) {\n try {\n\n if (isNaN(parseInt(BurnPermitId))) {\n yield call(showError, 'You must supply a Burn Permit ID to delete an Application Status.')\n return\n }\n if (isNaN(parseInt(BurnPermitApplicationStatusXrefId))) {\n yield call(showError, 'You must supply a Burn Permit Application Status ID to delete an Application Status.')\n return\n }\n\n const putAppStatusUrl = `${REACT_APP_SERVER_URL}${BurnPermitApplicationStatusXref.deleteEndpoint(BurnPermitId, BurnPermitApplicationStatusXrefId)}`\n\n const applicationStatusResponse = yield call(doFetch, putAppStatusUrl, { method: 'DELETE', })\n\n if (applicationStatusResponse.ok !== true) {\n const error = applicationStatusResponse.responseBody || 'An error occurred while attempting to delete the Application Status.'\n yield call(showError, error)\n return\n }\n\n yield put({\n type : OrmTypes.DESTROY, \n modelName : BurnPermitApplicationStatusXref.modelName, \n modelId : BurnPermitApplicationStatusXrefId,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n/**\n * Delete an application status change for a Burn Permit\n */\nexport function* deletePermitStatus ({ BurnPermitId, BurnPermitStatusXrefId, }) {\n try {\n\n if (!BurnPermitId) {\n yield call(showError, 'You must supply a Burn Permit ID to delete an Permit Status.')\n return\n }\n if (!BurnPermitStatusXrefId) {\n yield call(showError, 'You must supply a Burn Permit Permit Status ID to delete an Permit Status.')\n return\n }\n\n const putPermitStatusUrl = `${REACT_APP_SERVER_URL}${BurnPermitStatusXref.deleteEndpoint(BurnPermitId, BurnPermitStatusXrefId)}`\n\n const permitStatusResponse = yield call(doFetch, putPermitStatusUrl, { method: 'DELETE', })\n\n if (permitStatusResponse.ok !== true) {\n const error = permitStatusResponse.responseBody || 'An error occurred while attempting to delete the Permit Status.'\n yield call(showError, error)\n return\n }\n\n yield put({\n type : OrmTypes.DESTROY, \n modelName : 'BurnPermitStatusXref', \n modelId : BurnPermitStatusXrefId,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n/**\n * Submits a request to check if the Burn Permit with the provided ID is valid or not\n */\nexport function* validatePermit ({ burnPermitId, }) {\n try {\n \n if (isNaN(parseInt(burnPermitId))) {\n yield call(showError, 'You must supply a Burn Permit ID to check the Application validity.')\n return\n }\n\n yield call(showLoading)\n\n const appIsValidUrl = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/IsValid`\n\n const appIsValidResp = yield call(doFetch, appIsValidUrl)\n \n if (appIsValidResp.ok !== true) {\n yield call(showError, 'An error occurred while attempting to check the Application validity.')\n return\n }\n\n const appIsValid = appIsValidResp.responseBody.isValid\n const SECTION_IDS = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, ]\n // If the application is valid\n if (appIsValid) {\n // update the app state to reflect they're all complete\n yield put({\n type : BurnPermitFormTypes.SAVED_SECTIONS,\n sectionIds : SECTION_IDS,\n })\n }\n else {\n // otherwise update the app state to tell each one to validate themselves to reveal the errors\n // Set the array of section ids to validate so the form section component\n // can check to see if it should validate\n yield put({\n type : BurnPermitFormTypes.COMPLETED_STEPS,\n StepIds : SECTION_IDS,\n })\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\n/**\n * Submits a request to submit the Burn Permit for the Agency User\n */\nexport function* agencySubmitBurnPermit ({ burnPermitId, }) {\n try {\n\n yield call(showLoading)\n\n if (!Number.isInteger(parseInt(burnPermitId))) {\n yield call(showError, 'You must supply a Burn Permit ID to submit the Burn Permit.')\n return\n }\n\n const appSubmittedUrl = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/Submit`\n\n const response = yield call(doFetch, appSubmittedUrl)\n const { responseBody, } = response\n if (response.ok !== true) {\n yield call(showError, responseBody.error || 'An error occurred while attempting to submit the Burn Permit.')\n return\n }\n\n yield fork(getBurnPermitDetail, { burnPermitId, })\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* updateTonnageAndFee () {\n const burnPermitId = yield select(activeBurnPermitIdSelector)\n yield fork(getBurnPermit, { burnPermitId, updateFee: true, })\n}\n\n/**\n * Submits a request to get the Burn Permit object\n */\nexport function* getBurnPermit ({ burnPermitId, burnPermitNumber, updateFee = false, forceReload = false, },) {\n try {\n\n const { online, } = yield select(networkStateSelector)\n if (!online) {\n return\n }\n\n if (isNaN(parseInt(burnPermitId)) && !burnPermitNumber) {\n yield call(showError, 'You must supply a Burn Permit ID or Burn Permit Number.')\n return\n }\n\n let url = BURN_PERMIT_ENDPOINT\n if (burnPermitId) {\n url += `/${burnPermitId}`\n if (updateFee) {\n url += '?updateFee=true'\n }\n }\n else if (burnPermitNumber) {\n url += `/0?BurnPermitNumber=${burnPermitNumber}`\n if (updateFee) {\n url += '&updateFee=true'\n }\n }\n\n const burnPermDetailResp = yield call(doFetch, url)\n\n if (burnPermDetailResp.ok !== true) {\n if (!isEmpty(burnPermDetailResp.responseBody) && ('error' in burnPermDetailResp.responseBody || 'errors' in burnPermDetailResp.responseBody)) {\n const { error, errors, } = burnPermDetailResp.responseBody\n yield call(showError, error || errors)\n }\n else {\n yield put({ type: BurnPermitFormTypes.PERMIT_FAILED_TO_LOAD, })\n }\n return\n }\n\n const hasNewData = yield call(serverHasNewerData, BURN_PERMIT_MODEL_NAME, { BurnPermitId: burnPermitId, }, burnPermDetailResp.responseBody)\n if (forceReload || hasNewData) {\n yield call(upsertLocalModel, BURN_PERMIT_MODEL_NAME, burnPermDetailResp.responseBody)\n }\n\n return burnPermDetailResp\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n/**\n * Submits a request to get the Burn Permit information and activates the Permit Id\n * used when navigating to the Permit Application\n */\nexport function* getBurnPermitDetail ({ burnPermitId, burnPermitNumber, forceReload = false, }) {\n try {\n\n yield call(showLoading)\n\n yield put({\n type : BurnPermitFormTypes.ACTIVE_BURN_PERMIT,\n BurnPermitId : burnPermitId,\n })\n\n const online = yield select(appIsOnlineSelector)\n if (online) {\n\n const permit = yield call(getBurnPermit, { burnPermitId, burnPermitNumber, forceReload, })\n\n if (!permit) {\n yield put({ type: BurnPermitFormTypes.PERMIT_FAILED_TO_LOAD, })\n return\n }\n\n yield all([\n call(getBurnPermitSignatures, { burnPermitId, disableLoading: true, }),\n call(getPermitFiles, { permitId: burnPermitId, disableLoading: true, }),\n call(getBurnPermitStatusHistory, { burnPermitId, }),\n call(getOrderForBurnPermit, { burnPermitId, disableLoading: true, }),\n ])\n\n yield call(updateNextSteps, burnPermitId)\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* updateNextSteps (burnPermitId) {\n\n const userIsDnr = yield select(userIsDNR)\n const showAppNextSteps = yield select(shouldShowApplicationNextSteps, burnPermitId)\n if (!showAppNextSteps.isIssued) {\n let step = 'Apply', completedSteps = [], showModal = true\n if (showAppNextSteps.isPending) {\n // TODO: set `isValid` later once we have a consolidated validation endpoint\n // to check against\n if (showAppNextSteps.isSigned !== true && showAppNextSteps.isValid === true) {\n step = 'Sign'\n completedSteps = [ 'Apply', ]\n }\n else if (showAppNextSteps.isSigned && showAppNextSteps.isPaid !== true) {\n step = 'Pay'\n completedSteps = [ 'Apply', 'Sign', ]\n }\n }\n // Also check to see if the application is for a voucher agency\n else if (showAppNextSteps.isPaid !== true && showAppNextSteps.paysByVoucher !== true) {\n step = 'Pay'\n completedSteps = [ 'Apply', 'Sign', ]\n }\n else if (showAppNextSteps.isApproved) {\n step = 'Approved'\n completedSteps = [ 'Apply', 'Sign', 'Pay', 'Review', ]\n showModal = userIsDnr ? false : true\n }\n else if (showAppNextSteps.isDenied) {\n step = 'Denied'\n completedSteps = [ 'Apply', 'Sign', 'Pay', 'Review', ]\n showModal = userIsDnr ? false : true\n }\n else {\n step = 'Review'\n completedSteps = [ 'Apply', 'Sign', ]\n if (showAppNextSteps.paysByVoucher !== true) {\n completedSteps.push('Pay')\n }\n }\n yield put({\n type: BurnPermitInstructionsTypes.GO_TO_INSTRUCTION_STEP,\n step,\n burnPermitId,\n completedSteps,\n })\n if (step !== 'Apply' && showModal) {\n yield put({ type: UiTypes.OPEN_MODAL, modalKey: 'APPLICATION_NEXT_STEPS', })\n }\n }\n else {\n const showPermitNextSteps = yield select(shouldShowPermitNextSteps, burnPermitId)\n if (showPermitNextSteps) {\n yield put({ type: UiTypes.OPEN_MODAL, modalKey: 'PERMIT_NEXT_STEPS', })\n }\n else {\n yield put({ type: UiTypes.CLOSE_MODAL, modalKey: 'PERMIT_NEXT_STEPS', })\n }\n }\n \n // As long as it is signed, all the steps are complete\n if (showAppNextSteps.isSigned) {\n yield put({ type: BurnPermitFormTypes.COMPLETED_STEPS, burnPermitId, StepIds: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, ], })\n }\n}\n\nfunction* downloadPermitLookupData () {\n yield spawn(getStatusLookupData)\n yield spawn(getLookupData, { modelName: 'ArrivalTime', })\n yield spawn(getLookupData, { modelName: 'BurnIgnitionType', })\n yield spawn(getLookupData, { modelName: 'BurnPermitCondition', })\n yield spawn(getLookupData, { modelName: 'BurnReason', })\n yield spawn(getLookupData, { modelName: 'BurnType', })\n yield spawn(getLookupData, { modelName: 'County', })\n yield spawn(getLookupData, { modelName: 'DaysOfWeek', })\n yield spawn(getLookupData, { modelName: 'Direction', })\n yield spawn(getLookupData, { modelName: 'Distance', })\n yield spawn(getLookupData, { modelName: 'DuffType', })\n yield spawn(getLookupData, { modelName: 'EquipmentType', })\n yield spawn(getLookupData, { modelName: 'ForestType', })\n yield spawn(getLookupData, { modelName: 'FuelDiameter', })\n yield spawn(getLookupData, { modelName: 'LocationQuarter', })\n yield spawn(getLookupData, { modelName: 'ReferenceDirectionType', })\n yield spawn(getLookupData, { modelName: 'FireDistrictDepartment', })\n yield spawn(GetAllRegions)\n}\n\n/**\n * Submits a bulk request for Burn Permits to enable offline access for\n */\nexport function* downloadBurnPermits () {\n try {\n // Update the list container so users can access any new permits that they may be assigned before downloading\n yield put(BurnPermitListActions.getMyBurnPermits())\n yield put({ type: BurnPermitListTypes.RESET_DOWNLOAD_STATUS, })\n yield fork(downloadPermitLookupData)\n yield fork(downloadBurnPermitSignatures)\n yield fork(downloadBurnPermitAreaInfo)\n yield fork(downloadBurnPermitStatusHistory)\n yield fork(downloadBurnLocationInfo)\n yield fork(downloadBurnPermitSiteInfo)\n yield fork(downloadPileInfo)\n yield fork(downloadBurnPermitFuelsInfo)\n yield fork(downloadPermitConditions)\n yield fork(downloadApplicantInfo)\n \n const url = `${BURN_PERMIT_ENDPOINT}/Download/`\n\n const downloadPermitsResp = yield call(doFetch, url)\n\n if (downloadPermitsResp.ok !== true) {\n yield call(showError, downloadBurnPermits.responseBody.error || 'An error occurred download Burn Permits')\n return\n }\n\n yield put({\n type : OrmTypes.UPSERT_RANGE,\n modelName : BURN_PERMIT_MODEL_NAME,\n records : downloadPermitsResp.responseBody,\n })\n\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'BurnPermits', status: true, })\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\nexport function* getPermitFiles ({ permitId, disableLoading = false, }) {\n try {\n if (!disableLoading) {\n yield call(showLoading)\n }\n\n if (!permitId) {\n yield call(showError, 'You must supply a Burn Permit ID to retrieve files for.')\n return\n }\n\n yield fork(getLookupData, { modelName: 'BurnPermitDocumentType', })\n \n const url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Documents`\n\n const fileResp = yield call(doFetch, url)\n\n const { responseBody, } = fileResp\n if (fileResp.ok !== true) {\n let error = 'An error occurred retrieving files for the Permit Application'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n if (responseBody.length) {\n const hasNewData = yield call(serverHasNewerData, 'BurnPermitDocument', { BurnPermitId: permitId, }, responseBody)\n if (hasNewData) {\n yield call(replaceAll, 'BurnPermitDocument', responseBody, { BurnPermitId: permitId, })\n }\n }\n\n // Reset the state flag for successful upload\n yield put({ type: FileTypes.SET_SUCCESSFUL_UPLOAD, successful: false, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n if (!disableLoading) {\n yield call(hideLoading)\n }\n }\n}\n\nexport function* downloadPermitFile ({ permitId, fileName, documentId, }) {\n try {\n yield call(showLoading)\n\n if (!permitId) {\n yield call(showError, 'You must supply a Burn Permit ID to retrieve files for.')\n return\n }\n\n if (!documentId) {\n yield call(showError, 'You must supply a Permit Document ID to download.')\n return\n }\n \n const url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Download/${documentId}`\n\n const response = yield call(doFetch, url)\n const { downloadUrl, } = response.responseBody\n \n const _fileName = fileName.substring(0, fileName.lastIndexOf('.'))\n const fileExt = fileName.substring(fileName.lastIndexOf('.'))\n\n const downloadFileName = `${_fileName}_${dateFormatter(new Date(), 'YYYY-MM-DD_HH:mm:ss')}${fileExt}`\n\n yield fork(downloadFile, { url: downloadUrl, fileName: downloadFileName, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* downloadAllFiles ({ permitId, }) {\n try {\n yield call(showLoading)\n\n if (!permitId) {\n yield call(showError, 'You must supply a Burn Permit ID to retrieve files for.')\n return\n }\n\n const downloadUrl = `${BURN_PERMIT_ENDPOINT}/${permitId}/DownloadDocuments`\n\n const response = yield call(doFetch, downloadUrl)\n const { fileName, fileCode, } = response.responseBody\n \n const url = `${downloadUrl}/${fileCode}`\n \n yield call(downloadFile, { url, fileName, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield all([\n call(hideLoading),\n put(BurnPermitFormActions.doneDownloadingFiles()),\n ])\n }\n}\n\nexport function* deletePermitFile ({ permitId, documentId, }) {\n try {\n yield call(showLoading)\n\n if (!permitId) {\n yield call(showError, 'You must supply a Burn Permit ID to delete the specified file for.')\n return\n }\n \n const url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Document/${documentId}/Delete`\n\n const response = yield call(doFetch, url, { method: 'DELETE', })\n\n if (response.ok !== true) {\n yield call(showError, response.responseBody && response.responseBody.error ? response.responseBody.error : null)\n return\n }\n\n yield put({\n type : OrmTypes.DESTROY,\n modelName : 'BurnPermitDocument',\n modelId : documentId,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Upload an array of files to attach to the target Burn Permit.\n * @param {Object} Object containing the target BurnPermitId, file array, and a flag \n * indicating whether or not an Application Signature should be created\n */\nexport function* uploadPermitFiles ({ permitId, files, createSignature, }) {\n try {\n yield call(showLoading)\n\n if (!permitId) {\n yield call(showError, 'You must supply a Burn Permit ID to upload files to.')\n return\n }\n\n // Validate the file(s) being uploaded to ensure they all have a unique name\n // Validate the incoming `files` arg as well as any existing files we already know about\n const currentFiles = yield select(permitApplicationDocuments, permitId)\n if (currentFiles.length) {\n const { errMessage, repeatingNames, } = yield call(compareFileNames, { files1: files, files2: currentFiles, })\n // If there are repeating names, start the early exit\n if (repeatingNames.length) {\n // If the user is creating a signature, give them a more specific error message\n if (createSignature === true) {\n errMessage.push('Please remove the document with the same name in the Document Section, then attempt to upload the Signature Document again.')\n }\n else {\n errMessage.push('Please remove the existing document with the same name or rename the following file(s) then attempt to upload the file(s) again.')\n }\n }\n if (errMessage.length) {\n yield call(showError, errMessage.join('\\n\\n'))\n return\n }\n }\n\n let url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Upload`\n\n if (createSignature) {\n url += '?createApplicationSignature=true'\n }\n\n const fileResp = yield call(uploadFiles, { url, files, })\n\n const { responseBody, } = fileResp\n if (fileResp.ok !== true) {\n let error = 'An error occurred uploading files to the Permit Application'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n yield put({\n type : OrmTypes.UPSERT_RANGE,\n modelName : 'BurnPermitDocument',\n records : responseBody,\n })\n\n // If we're creating a signature, refresh the whole permit\n // It may affect the permit status\n if (createSignature){\n yield fork(getBurnPermitDetail, { burnPermitId: permitId, })\n } else {\n yield fork(getBurnPermitSignatures, { burnPermitId: permitId, })\n yield fork(getPermitFiles, { permitId, })\n }\n\n // Reset the state flag for successful upload to clear the uploaded files\n yield put({ type: FileTypes.SET_SUCCESSFUL_UPLOAD, successful: false, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\n/**\n * Upload an array of files to attach to the target Burn Permit.\n * @param {Object} Object containing the target BurnPermitId, file array, and a flag \n * indicating whether or not an Application Signature should be created\n */\nexport function* updateDocumentType ({ permitId, documentId, documentTypeId, uploadAnyway = false, }) {\n try {\n yield call(showLoading)\n\n if (!permitId) {\n yield call(showError, 'You must supply the Burn Permit ID the document is attached to.')\n return\n }\n\n if (!documentId) {\n yield call(showError, 'You must supply a Burn Permit Document ID to update.')\n return\n }\n\n if (!documentTypeId) {\n yield call(showError, 'You must supply a Burn Permit Document Type ID to update.')\n return\n }\n\n // If the current user is DNR, the app is pending, and the doc type chosen is Mailed App\n // Show a confirmation modal outlining the purpose of the document and where it should be uploaded instead\n // However provide them the opportunity to upload anyways while acknowleding that they will have to delete\n // it and upload it in the signature section\n const userIsDnr = yield select(userIsDNR)\n const currAppStatus = yield select(permitApplicationStatus, permitId)\n const isPendingApp = (currAppStatus && currAppStatus.Status === 'Pending')\n const docTypes = yield select(documentTypesForSelect)\n const isMailedApp = (docTypes || []).some(t => t.Value === parseInt(documentTypeId) && t.Text === 'Mailed Application')\n if (userIsDnr && isPendingApp && isMailedApp) {\n if (!uploadAnyway) {\n yield put({ type: UiTypes.OPEN_MODAL, modalKey: 'UPLOAD_MAILED_APP_DOC', })\n return\n }\n else {\n // Call action to hide modal\n yield put({ type: UiTypes.CLOSE_MODAL, })\n }\n }\n\n let url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Document/${documentId}`\n\n const resp = yield call(doFetch, url, {\n method : 'PUT',\n body : {\n BurnPermitId : permitId,\n BurnPermitDocumentId : documentId,\n BurnPermitDocumentTypeId : documentTypeId,\n },\n })\n // Clear out the doc info once the doc update has been attempted\n yield put({ type: BurnPermitFormTypes.CLEAR_DOC_TYPE_INFO, })\n\n const { responseBody, } = resp\n if (resp.ok !== true) {\n let error = 'An error occurred updating the type of the document.'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n yield fork(getPermitFiles, { permitId, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Remove suspension start and end dates for a permit\n * @param {Object} updateData - An Object containing the target BurnPermitId\n * @param {number} updateData.permitId - The permit Id to update\n */\nexport function* clearSuspension ({ permitId, }) {\n yield call(submitSuspension, permitId, null, null, null)\n}\n\n/**\n * Update suspension start and end dates for a permit\n * @param {Object} updateData - An Object containing the target BurnPermitId and suspension start and/or end dates\n * @param {number} updateData.permitId - The permit Id to update\n * @param {string} updateData.startDate - An Object containing the target BurnPermitId and suspension start and/or end dates\n * @param {string} updateData.endDate - An Object containing the target BurnPermitId and suspension start and/or end dates\n * @param {string} updateData.suspensionComment - An Object containing the target BurnPermitId and suspension reason\n */\nexport function* updateSuspension ({ permitId, startDate, endDate, suspensionComment, }){\n if (!permitId) {\n yield call(showError, 'You must supply the Burn Permit ID to edit suspension dates.')\n return\n }\n\n if (!startDate && !endDate) {\n yield call(showError, 'You must supply a suspension start or end date.')\n return\n }\n\n yield call(submitSuspension, permitId, startDate, endDate, suspensionComment)\n}\n\n/**\n * Private saga to update suspension start and end dates for a permit\n * @param {number} permitId - The permit Id to update\n * @param {string} startDate - An Object containing the target BurnPermitId and suspension start and/or end dates\n * @param {string} endDate - An Object containing the target BurnPermitId and suspension start and/or end dates\n * @param {string} suspensionComment - An Object containing the target BurnPermitId and suspension reason\n */\nfunction* submitSuspension (permitId, startDate, endDate, suspensionComment) {\n try {\n yield call(showLoading)\n\n let url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Suspension`\n const resp = yield call(doFetch, url, {\n method : 'POST',\n body : {\n BurnPermitId : permitId,\n SuspensionStartDate : startDate,\n SuspensionEndDate : endDate,\n SuspensionComment : suspensionComment,\n },\n })\n\n const { responseBody, } = resp\n\n if (resp.ok !== true) {\n let error = 'An error occurred updating permit suspension dates.'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n const updateObj = {\n BurnPermitId : responseBody.BurnPermitId,\n SuspensionStartDate : responseBody.SuspensionStartDate,\n SuspensionEndDate : responseBody.SuspensionEndDate,\n SuspensionComment : responseBody.SuspensionComment,\n UpdateBy : responseBody.UpdateBy,\n UpdateDate : responseBody.UpdateDate,\n }\n\n yield put({ \n type : OrmTypes.UPDATE, \n modelName : BURN_PERMIT_MODEL_NAME,\n modelId : permitId,\n updateObj,\n })\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\nexport function* extendPermit ({ permitId, expirationDate, }) {\n if (!permitId || isNaN(permitId)) {\n yield call(showError, 'You must supply the Burn Permit ID of the Permit to Extend.')\n return\n }\n if (!expirationDate) {\n yield call(showError, 'You must supply the new Expiration Date for the Permit to Extend.')\n return\n }\n try {\n yield put({ type: BurnPermitSignatureTypes.LOADING_DOCU_SIGN_URL, loading: true, })\n yield put({ type: UiTypes.CLOSE_MODAL, })\n const url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Extend`\n const resp = yield call(doFetch, url, {\n method : 'POST',\n body : {\n BurnPermitId : permitId,\n BurnPermitExpirationDate : expirationDate,\n },\n })\n\n const { responseBody, } = resp\n if (resp.ok !== true) {\n let error = 'An error occurred while extending the permit.'\n if (responseBody) {\n if (responseBody.error) {\n error = responseBody.error\n }\n else if (Array.isArray(responseBody.errors) && responseBody.errors.length) {\n error = responseBody.errors.join('\\n')\n }\n }\n yield call(showError, error)\n yield put({ type: BurnPermitSignatureTypes.LOADING_DOCU_SIGN_URL, loading: false, })\n return\n }\n\n const {\n DocuSignUrl,\n PermitExtended,\n } = responseBody\n if (PermitExtended) {\n yield all([\n put({ type: BurnPermitSignatureTypes.LOADING_DOCU_SIGN_URL, loading: false, }),\n put({ type: AppTypes.SHOW_SUCCESS, }),\n fork(getBurnPermitStatusHistory, { burnPermitId: permitId, }),\n ])\n return\n }\n \n if (!DocuSignUrl) {\n yield put({ type: ApiTypes.FAILURE, error: 'There is an issue extending the permit. Please contact support.', })\n yield put({ type: BurnPermitSignatureTypes.LOADING_DOCU_SIGN_URL, loading: false, })\n return\n }\n window.location.href = DocuSignUrl\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Private saga to update suspension start and end dates for a permit\n * @param {number} permitId - The permit Id to update\n * @param {string} revokeData - An Object containing the revocation date and comment\n */\nexport function* revokePermit ({ permitId, revokeData, }) {\n try {\n yield call(showLoading)\n\n const url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Revoke`\n const resp = yield call(doFetch, url, {\n method : 'POST',\n body : {\n BurnPermitId : permitId,\n StatusDate : revokeData.RevokedDate,\n Comment : revokeData.Comment,\n },\n })\n\n const { responseBody, } = resp\n if (resp.ok !== true) {\n let error = 'An error occurred revoking the permit.'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n yield fork(getBurnPermitStatusHistory, { burnPermitId: permitId, })\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Reverses the Permit revocation in the event it was improperly revoked\n * @param {number} permitId - The permit Id to restor\n */\nexport function* undoRevocation ({ permitId, }) {\n try {\n yield call(showLoading)\n\n const url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Revoke/Undo`\n const resp = yield call(doFetch, url, { method: 'DELETE', })\n\n const { responseBody, } = resp\n if (resp.ok !== true) {\n let error = 'An error occurred undoing the permit revocation.'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n yield fork(getBurnPermitStatusHistory, { burnPermitId: permitId, })\n yield put({ type: AppTypes.SHOW_SUCCESS, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Deletes a Pending application. An application in any other state must be cancelled or denied.\n * @param {number} permitId - The permit Id to delete\n */\nexport function* deleteApplication ({ permitId, }) {\n // Get the local permit first\n const burnPermit = yield select(permitByIdSelector, permitId)\n const { online, } = yield select(networkStateSelector)\n // If it's been saved to the server, submit the req to delete it once we come back online\n if (!burnPermit.IsLocal) {\n yield put(BurnPermitFormActions.deleteApplicationRequest(permitId))\n }\n yield put({ type: BurnPermitFormTypes.ACTIVE_BURN_PERMIT, })\n yield put({ type: CartTypes.REMOVE_ITEM_FROM_CART, itemId: permitId, })\n\n // If we're not online, delete it locally\n if (!online) {\n yield call(deleteLocalPermit, permitId)\n // If it's local, cancel any pending create request\n if (burnPermit.IsLocal) {\n yield put({\n type : ApiTypes.CANCEL_SUBMIT,\n action_type : BurnPermitFormTypes.CREATE_PERMIT_APPLICATION_REQUEST,\n url : `${BURN_PERMIT_ENDPOINT}`,\n method : 'POST',\n keyName : 'localId',\n keyValue : permitId,\n })\n }\n }\n}\n\nfunction* deleteApplicationSuccess (resp) {\n yield call(deleteLocalPermit, resp.permitId)\n}\n\nfunction* deleteLocalPermit (permitId) {\n const { online, } = yield select(networkStateSelector)\n // Delete all related data\n const burnPermit = yield select(permitByIdSelector, permitId)\n yield call(destroyLocalModel, BURN_PERMIT_SEARCH_MODEL_NAME, permitId)\n if (!online) {\n // The configured store is set up to only take the latest of this action\n // so we don't need to manually cancel it ourselves\n yield put(BurnPermitListActions.getMyBurnPermits())\n }\n if (!burnPermit) {\n return\n }\n yield all([\n put({ type: OrmTypes.DESTROY_ALL, modelName: BurnPermitApplicationStatusXref.modelName, filterObj: { BurnPermitId: permitId, }, }),\n put({ type: OrmTypes.DESTROY_ALL, modelName: 'BurnPermitFuelLoadingXref', filterObj: { BurnPermitFuelId: burnPermit.BurnPermitFuelId, }, }),\n put({ type: OrmTypes.DESTROY_ALL, modelName: 'BurnPermitDocument', filterObj: { BurnPermitId: permitId, }, }),\n put({ type: OrmTypes.DESTROY_ALL, modelName: 'BurnPermitSignature', filterObj: { BurnPermitId: permitId, }, }),\n put({ type: OrmTypes.DESTROY_ALL, modelName: 'BurnPermitPileGroup', filterObj: { BurnPermitId: permitId, }, }),\n put({ type: OrmTypes.DESTROY, modelName: BURN_PERMIT_MODEL_NAME, modelId: permitId, }),\n put({ type: OrmTypes.DESTROY, modelName: 'BurnPermitArea', modelId: burnPermit.BurnPermitAreaId, }),\n put({ type: OrmTypes.DESTROY, modelName: 'BurnPermitLocation', modelId: burnPermit.BurnPermitLocationId, }),\n put({ type: OrmTypes.DESTROY, modelName: 'BurnPermitSite', modelId: burnPermit.BurnPermitSiteId, }),\n put({ type: OrmTypes.DESTROY, modelName: 'BurnPermitFuel', modelId: burnPermit.BurnPermitFuelId, }),\n ])\n const lastRoute = yield select(lastRouteSelector)\n yield put({ type: AppTypes.REDIRECT_TO, route: lastRoute.indexOf('new') > -1 ? '/permits' : lastRoute, })\n}\n\n/**\n * Copies an existing application and creates a new record from it.\n * @param {number} permitId - The permit Id to copy\n */\nexport function* copyApplication ({ permitId, }) {\n try { \n if (!permitId) {\n yield call(showError, 'You must supply the Burn Permit ID of the Permit Application to Copy.')\n return\n }\n let url = `${BURN_PERMIT_ENDPOINT}/${permitId}/CopyBurnPermit`\n\n const resp = yield call(doFetch, url, {\n method : 'POST',\n body : { BurnPermitId: permitId, },\n })\n\n const { responseBody, } = resp\n if (resp.ok !== true) {\n let error = 'An error occurred copying the permit application.'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n \n yield put({ \n type : AppTypes.REDIRECT_TO,\n route : `/permits/${responseBody}`,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n/**\n * Gets the list of burn units for the current user, or if DNR, for the selected Landowner and/or Agent.\n * @param {number} permitId - The permit Id to use if logged in as a DNR user\n */\nexport function* getBurnPermitUnits ({ burnPermitId, }) {\n try {\n const { online, } = yield select(networkStateSelector)\n if (!online) {\n return\n }\n let url = `${BURN_PERMIT_ENDPOINT}/GetBurnPermitUnits/`\n if (burnPermitId) {\n url += `?id=${burnPermitId}`\n }\n\n const resp = yield call(doFetch, url)\n\n const { responseBody, } = resp\n if (resp.ok !== true) {\n let error = 'An error occurred retrieving the Burn Unit names for the permit application.'\n if (responseBody && responseBody.error) {\n error = responseBody.error\n }\n yield call(showError, error)\n return\n }\n\n if (Array.isArray(responseBody)) {\n const mappedUnits = responseBody.map(unitName => {\n return {\n BurnPermitUnitName: unitName,\n }\n })\n yield call(replaceAll, 'BurnPermitUnit', mappedUnits)\n }\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* unlockApplication ({ permitId, }) {\n try {\n yield call(showLoading)\n\n const url = `${BURN_PERMIT_ENDPOINT}/${permitId}/Signature`\n\n const resp = yield call(doFetch, url, { method: 'DELETE', })\n if (resp.ok !== true) {\n const error = resp && resp.responseBody ? resp.responseBody.error : 'An error occurred attempting to unlock your Permit Application. Please contact support.'\n yield call(showError, error)\n return\n }\n\n const localSignature = yield select(signatureByPermitId, permitId)\n yield call(destroyLocalModel, 'BurnPermitSignature', localSignature.BurnPermitSignatureId)\n yield call(getPermitFiles, { permitId, })\n }\n catch (e) {\n yield call(showError, e)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* checkIfFilesAreAlreadyAttached ({ files, }) {\n try {\n const permitId = yield select(activeBurnPermitIdSelector)\n\n let url = `${BURN_PERMIT_ENDPOINT}/${permitId}/DocumentNameAlreadyAttached`\n\n const reqs = files.map(f => call(doFetch, `${url}?documentName=${f.name}`))\n\n const resps = yield all(reqs)\n\n for (let i = 0, len = resps.length; i < len; i++) {\n const resp = resps[i].responseBody\n if (resp.Exists) {\n yield call(showError, `Document ${resp.DocumentName} is already attached to Burn Permit ID ${resp.BurnPermitId}`)\n }\n }\n }\n catch (e) {\n yield call(showError, e)\n }\n}\n\nexport const BurnPermitSagas = [\n takeLatest(BurnPermitFormTypes.GET_BURN_PERMIT_STATUS_HISTORY, getBurnPermitStatusHistory),\n takeLatest(BurnPermitFormTypes.SUBMIT_APPLICATION_STATUS, submitApplicationStatus),\n takeLatest(BurnPermitFormTypes.DELETE_APPLICATION_STATUS, deleteApplicationStatus),\n takeLatest(BurnPermitFormTypes.DELETE_PERMIT_STATUS, deletePermitStatus),\n takeLatest(BurnPermitFormTypes.VALIDATE_PERMIT, validatePermit),\n takeLatest(BurnPermitFormTypes.GET_BURN_PERMIT, getBurnPermit),\n takeLatest(BurnPermitFormTypes.GET_BURN_PERMIT_DETAIL, getBurnPermitDetail),\n takeLatest(BurnPermitFormTypes.AGENCY_SUBMIT_BURN_PERMIT, agencySubmitBurnPermit),\n takeLatest(BurnPermitFormTypes.GET_PERMIT_FILES, getPermitFiles),\n takeLatest(BurnPermitFormTypes.UPLOAD_PERMIT_FILES, uploadPermitFiles),\n takeLatest(BurnPermitFormTypes.UPDATE_SUSPENSION, updateSuspension),\n takeLatest(BurnPermitFormTypes.CLEAR_SUSPENSION, clearSuspension),\n takeLatest(BurnPermitFormTypes.EXTEND_PERMIT, extendPermit),\n takeLatest(BurnPermitFormTypes.REVOKE_PERMIT, revokePermit),\n takeLatest(BurnPermitFormTypes.UNDO_REVOCATION, undoRevocation),\n takeLatest(BurnPermitListTypes.DOWNLOAD_BURN_PERMITS, downloadBurnPermits),\n takeLatest(BurnPermitFormTypes.UNLOCK_APPLICATION, unlockApplication),\n // Get lookup data when the app says so\n takeLatest(ApiTypes.DOWNLOAD_LOOKUP_DATA, downloadPermitLookupData),\n\n takeEvery(BurnPermitFormTypes.DOWNLOAD_PERMIT_FILE, downloadPermitFile),\n takeEvery(BurnPermitFormTypes.DOWNLOAD_ALL_FILES, downloadAllFiles),\n takeEvery(BurnPermitFormTypes.DELETE_PERMIT_FILE, deletePermitFile),\n takeEvery(BurnPermitFormTypes.UPDATE_DOCUMENT_TYPE, updateDocumentType),\n takeEvery(BurnPermitFormTypes.DELETE_APPLICATION, deleteApplication),\n takeEvery(BurnPermitFormTypes.DELETE_APPLICATION_SUCCESS, deleteApplicationSuccess),\n takeEvery(BurnPermitFormTypes.COPY_APPLICATION, copyApplication),\n takeEvery(BurnPermitFormTypes.CREATE_PERMIT_APPLICATION, createPermitApplication),\n takeEvery(BurnPermitFormTypes.CREATE_PERMIT_APPLICATION_SUCCESS, createPermitApplicationSuccess),\n takeEvery(BurnPermitFormTypes.CHECK_IF_FILES_ARE_ALREADY_ATTACHED, checkIfFilesAreAlreadyAttached),\n]","import { createActions, } from 'reduxsauce'\nimport BurnPermitArea from '../models/BurnPermitArea'\n\nconst BURN_PERMIT_AREA_ENDPOINT = BurnPermitArea.endpoint()\n\n\nconst { Types, Creators, } = createActions({\n getBurnAreaInfo : [ 'burnPermitAreaId', ],\n updateBurnPermitArea : [ 'burnPermitAreaInfo', ],\n updateBurnPermitAreaRequest : (burnPermitArea, showSuccess = false, calcFee = false) => ({\n type : 'UPDATE_BURN_PERMIT_AREA_REQUEST',\n meta : {\n offline: {\n effect: {\n url : `${BURN_PERMIT_AREA_ENDPOINT}/${burnPermitArea.BurnPermitAreaId}`,\n init : { method: 'PUT', body: { ...burnPermitArea, }, },\n },\n commit: {\n type : 'UPDATE_BURN_PERMIT_AREA_SUCCESS',\n localId : burnPermitArea.BurnPermitAreaId,\n showSuccess,\n calcFee,\n },\n rollback: { type: 'API_FAIL', },\n },\n },\n }),\n updateBurnPermitAreaSuccess: [ 'payload', ],\n})\n \nexport const BurnPermitAreaTypes = Types\nexport default Creators","// Libraries\r\nimport { put, select, call, fork, takeLatest, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { hideLoading, } from './AppSagas'\r\nimport { getLookupData, doFetch, showError, extractPayload, } from './ApiSagas'\r\nimport { updateLocalModel, upsertLocalModel, upsertLocalModels, serverHasNewerData, } from './OrmSagas'\r\nimport { updateTonnageAndFee, } from './BurnPermitSagas'\r\n\r\n// Reducers\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport BurnPermitAreaActions, { BurnPermitAreaTypes, } from '../redux/BurnPermitAreaRedux'\r\nimport { BurnPermitListTypes, } from '../redux/BurnPermitListRedux'\r\n\r\n// Selectors\r\nimport {\r\n getBurnPermit as getBurnPermitSelector,\r\n getBurnPermitId,\r\n networkStateSelector,\r\n} from '../selectors/selectors'\r\nimport { modelByIdSelector, } from '../selectors/modelSelectors'\r\n\r\n// Models\r\nimport BurnPermitArea from '../models/BurnPermitArea'\r\nimport BurnPermitSearch from '../models/BurnPermitSearch'\r\n\r\n// Constants\r\nconst BURN_PERMIT_AREA_ENDPOINT = BurnPermitArea.endpoint()\r\nconst PERMIT_SEARCH_MODEL_NAME = BurnPermitSearch.modelName\r\nconst PERMIT_AREA_MODEL_NAME = BurnPermitArea.modelName\r\n\r\n\r\nexport function* getBurnAreaInfo ({ burnPermitAreaId, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online) {\r\n return\r\n }\r\n\r\n if (isNaN(burnPermitAreaId)) {\r\n yield call(showError, 'You must supply a valid Burn Permit Area ID.')\r\n return\r\n }\r\n\r\n yield fork(getLookupData, { modelName: 'BurnType', })\r\n\r\n const burnPermitAreaInfoUrl = `${BURN_PERMIT_AREA_ENDPOINT}/${burnPermitAreaId}`\r\n\r\n const burnPermAreaResp = yield call(doFetch, burnPermitAreaInfoUrl)\r\n\r\n if (burnPermAreaResp.ok !== true) {\r\n yield call(showError, `An error occurred requesting Burn Permit Area info for ID ${burnPermitAreaId}`)\r\n return\r\n }\r\n const hasNewData = yield call(serverHasNewerData, PERMIT_AREA_MODEL_NAME, { BurnPermitAreaId: burnPermitAreaId, }, burnPermAreaResp.responseBody)\r\n if (hasNewData) {\r\n yield call(upsertLocalModel, PERMIT_AREA_MODEL_NAME, burnPermAreaResp.responseBody)\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error.message)\r\n }\r\n}\r\n\r\n\r\nexport function* downloadBurnPermitAreaInfo () {\r\n try {\r\n const downloadResp = yield call(doFetch, `${BURN_PERMIT_AREA_ENDPOINT}/Download`)\r\n\r\n if (downloadResp.ok !== true) {\r\n yield call(showError, 'An error occurred downloading Burn Permit Area info.')\r\n return\r\n }\r\n\r\n yield call(upsertLocalModels, PERMIT_AREA_MODEL_NAME, downloadResp.responseBody)\r\n\r\n yield put({ type: BurnPermitListTypes.SET_DOWNLOAD_STATUS, target: 'AreaInfo', status: true, })\r\n }\r\n catch (error) {\r\n yield call(showError, error.message)\r\n }\r\n}\r\n\r\nfunction* updateBurnPermitArea ({ burnPermitAreaInfo, }) {\r\n \r\n const { online, } = yield select(networkStateSelector)\r\n\r\n const burnPermit = yield select(getBurnPermitSelector, { BurnPermitAreaId: burnPermitAreaInfo.BurnPermitAreaId, })\r\n \r\n // check if model is related to a burn permit that is local\r\n // if it is not, check for and cancel any queued requests\r\n if (!burnPermit.IsLocal) {\r\n // if we're offline, cancel any queued req, then submit a new one\r\n if (!online) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : BurnPermitAreaTypes.UPDATE_BURN_PERMIT_AREA_REQUEST,\r\n url : `${BURN_PERMIT_AREA_ENDPOINT}/${burnPermitAreaInfo.BurnPermitAreaId}`,\r\n method : 'PUT',\r\n keyName : BurnPermitArea.options.idAttribute,\r\n keyValue : burnPermitAreaInfo.BurnPermitAreaId,\r\n })\r\n }\r\n const calcFee = true\r\n yield put(BurnPermitAreaActions.updateBurnPermitAreaRequest(burnPermitAreaInfo, online, calcFee))\r\n }\r\n\r\n if (!online) {\r\n const model = { ...burnPermitAreaInfo, Submit: true, }\r\n const updatedAreaInfo = yield call(updateLocalModel, PERMIT_AREA_MODEL_NAME, burnPermitAreaInfo.BurnPermitAreaId, model)\r\n // update local search result so the My Permits and Search results show the pending updates\r\n const burnPermitId = yield select(getBurnPermitId, { BurnPermitAreaId: updatedAreaInfo.BurnPermitAreaId, })\r\n const BurnType = updatedAreaInfo.BurnTypes.toModelArray().map(t => t.BurnTypeName).join(', ')\r\n const HarvestAcres = updatedAreaInfo.HarvestAcres\r\n yield call(updateLocalModel, PERMIT_SEARCH_MODEL_NAME, burnPermitId, { BurnType, BurnAcres: HarvestAcres, })\r\n }\r\n}\r\n\r\nfunction* updateBurnPermitAreaSuccess (resp) {\r\n try {\r\n const { showSuccess, calcFee, } = resp\r\n const burnPermitArea = yield call(extractPayload, resp)\r\n const { BurnPermitAreaId, } = burnPermitArea\r\n yield call(updateLocalModel, PERMIT_AREA_MODEL_NAME, BurnPermitAreaId, burnPermitArea)\r\n\r\n if (showSuccess) {\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n if (calcFee === true) {\r\n // Get the current burn permit id based on the Area Id\r\n const burnPermitId = yield select(getBurnPermitId, { BurnPermitAreaId: BurnPermitAreaId, })\r\n if (burnPermitId) {\r\n // Issue a request to update the detail to get the updated estimated fee and tonnage\r\n yield call(updateTonnageAndFee)\r\n }\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nexport function* submitOfflineAreaEdits (localId, serverId) {\r\n try {\r\n // Get the local area model\r\n const burnPermitArea = yield select(modelByIdSelector, { modelName: BurnPermitArea.modelName, modelId: localId, })\r\n if (burnPermitArea.Submit) {\r\n // Get the ref data\r\n const permitAreaRef = { ...burnPermitArea._fields, }\r\n // Set the server id\r\n permitAreaRef.BurnPermitAreaId = serverId\r\n // Map the virtual fk data\r\n permitAreaRef.BurnTypes = burnPermitArea.BurnTypes.toRefArray().map(t => t.BurnTypeId)\r\n // Update it\r\n const resp = yield call(doFetch, `${BURN_PERMIT_AREA_ENDPOINT}/${serverId}`, { method: 'PUT', body: permitAreaRef, })\r\n if (resp.ok) {\r\n yield fork(updateBurnPermitAreaSuccess, { payload: resp.responseBody, })\r\n return\r\n }\r\n yield call(showError, resp.responseBody)\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nexport const BurnPermitAreaSagas = [\r\n takeLatest(BurnPermitAreaTypes.GET_BURN_AREA_INFO, getBurnAreaInfo),\r\n takeLatest(BurnPermitAreaTypes.UPDATE_BURN_PERMIT_AREA, updateBurnPermitArea),\r\n takeLatest(BurnPermitAreaTypes.UPDATE_BURN_PERMIT_AREA_SUCCESS, updateBurnPermitAreaSuccess),\r\n]","import { createSelector, } from 'reselect'\r\nimport { ormSelector, ormWithPropSelector, ormByIdSelector, } from './selectors'\r\nimport { GetRequestSymbolByStatus, } from '../config/map/symbols'\r\nimport { dateFormatter, } from '../utilities'\r\nimport { formatLegalDesc, } from '../utilities/columnHelpers'\r\nimport { userCanEnterAnyIgnDate, userCanBypassSignature, } from './burnRequestPermissionSelectors'\r\nimport { PERSON_TYPE_GOV_AGENT, } from './env'\r\n\r\nexport const burnReqStateSelector = state => state.BurnRequestDetail\r\n\r\nexport const requestDownloadedCount = ormSelector(\r\n ({ BurnRequest, }) => {\r\n const count = BurnRequest.count()\r\n return count\r\n }\r\n)\r\n\r\nexport const burnRequestsSelector = ormSelector(\r\n ({ BurnRequestSearch, }) => {\r\n return BurnRequestSearch.all().toRefArray()\r\n }\r\n)\r\n\r\nconst searchStateSelector = state => state.BurnRequestSearch\r\n\r\nconst burnRequestSearchParamSelector = createSelector(\r\n searchStateSelector,\r\n state => state.searchParams || {}\r\n)\r\nexport const burnRequestSearchDataSelector = createSelector(\r\n searchStateSelector,\r\n state => state || {}\r\n)\r\n\r\nexport const burnRequestsOfflineSelector = ormWithPropSelector(\r\n burnRequestSearchParamSelector,\r\n ({ BurnRequestSearch, }, searchParams) => {\r\n\r\n let results = BurnRequestSearch\r\n\r\n // Default to an empty object just in case the prop is null or undefined\r\n if (!searchParams) {\r\n searchParams = {}\r\n }\r\n\r\n const {\r\n BurnRequestId,\r\n BurnPermitId,\r\n BurnPermitNumber,\r\n BurnRequestStatus,\r\n BurnRequestStartDate,\r\n BurnRequestEndDate,\r\n PlannedIgnitionStartDate,\r\n PlannedIgnitionEndDate,\r\n AssignedTo,\r\n UnitName,\r\n County,\r\n Region,\r\n LegalDesc,\r\n MinAcres,\r\n MaxAcres,\r\n MinTons,\r\n MaxTons,\r\n BurnType,\r\n AgentName,\r\n LandownerName,\r\n Address,\r\n HasPostBurn,\r\n MultiDayBurn,\r\n } = searchParams\r\n\r\n if (BurnRequestId) {\r\n results = results.filter({ BurnRequestId: parseInt(BurnRequestId), })\r\n }\r\n\r\n if (BurnPermitId) {\r\n results = results.filter({ BurnPermitId: parseInt(BurnPermitId), })\r\n }\r\n\r\n if (BurnPermitNumber) {\r\n results = results.filter(r => r.BurnPermitNumber && r.BurnPermitNumber.toLocaleLowerCase().includes(BurnPermitNumber.toLocaleLowerCase()))\r\n }\r\n\r\n if (AgentName) {\r\n results = results.filter(r => r.Agent && r.Agent.toLocaleLowerCase().includes(AgentName.toLocaleLowerCase()))\r\n }\r\n\r\n if (LandownerName) {\r\n results = results.filter(r => r.Landowner && r.Landowner.toLocaleLowerCase().includes(LandownerName.toLocaleLowerCase()))\r\n }\r\n\r\n if (AssignedTo) {\r\n results = results.filter({ AssignedTo, })\r\n }\r\n\r\n if (BurnType) {\r\n results = results.filter({ BurnType, })\r\n }\r\n\r\n if (BurnRequestStatus) {\r\n results = results.filter({ BurnRequestStatus, })\r\n }\r\n\r\n if (UnitName) {\r\n results = results.filter(r => r.BurnUnitName && r.BurnUnitName.toLocaleLowerCase().includes(UnitName.toLocaleLowerCase()))\r\n }\r\n\r\n if (County) {\r\n results = results.filter({ County, })\r\n }\r\n\r\n if (Region) {\r\n results = results.filter({ Region, })\r\n }\r\n\r\n if (Address) {\r\n results = results.filter(r => \r\n [\r\n `${r.Address1 || ''} ${r.Address2 || ''} ${r.Address3 || ''}`.trim(),\r\n `${r.AddressCity ? ` ${r.AddressCity},` : ''} ${r.AddressState} ${r.AddressZip || ''}`.trim(),\r\n ].join(' ').toLocaleLowerCase().includes(Address.toLocaleLowerCase()))\r\n }\r\n\r\n if (LegalDesc) {\r\n results = results.filter(r => \r\n `${r.LegalDescQ1 || ''} ${r.LegalDescQ2 || ''} S${r.LegalDescSection} T${r.LegalDescTownship} R${r.LegalDescRange} ${r.LegalDescDirection || ''}`\r\n .trim().toLocaleLowerCase().includes(LegalDesc.toLocaleLowerCase())\r\n )\r\n }\r\n\r\n if (MinAcres) {\r\n results = results.filter(r => r.BurnAcres >= MinAcres)\r\n }\r\n\r\n if (MaxAcres) {\r\n results = results.filter(r => r.BurnAcres <= MaxAcres)\r\n }\r\n\r\n if (MinTons) {\r\n results = results.filter(r => r.TotalPermitTonnage >= MinTons)\r\n }\r\n\r\n if (MaxTons) {\r\n results = results.filter(r => r.TotalPermitTonnage <= MaxTons)\r\n }\r\n\r\n if (BurnRequestStartDate) {\r\n results = results.filter(r => r.BurnRequestDate >= BurnRequestStartDate)\r\n }\r\n\r\n if (BurnRequestEndDate) {\r\n results = results.filter(r => r.BurnRequestDate <= BurnRequestEndDate)\r\n }\r\n\r\n if (PlannedIgnitionStartDate) {\r\n results = results.filter(r => r.PlannedIgnitionDate >= PlannedIgnitionStartDate)\r\n }\r\n\r\n if (PlannedIgnitionEndDate) {\r\n results = results.filter(r => r.PlannedIgnitionDate <= PlannedIgnitionEndDate)\r\n }\r\n\r\n if (HasPostBurn !== '') {\r\n results = results.filter({ HasPostBurn, })\r\n }\r\n\r\n if (MultiDayBurn !== '') {\r\n results = results.filter({ MultiDayBurn, })\r\n }\r\n\r\n return results.all().toRefArray()\r\n }\r\n)\r\n\r\nexport const mapBurnRequest = (req) => {\r\n if (!req) {\r\n return null\r\n }\r\n return {\r\n BurnRequestId : parseInt(req.BurnRequestId),\r\n CreateDate : req.CreateDate,\r\n CreateBy : req.CreateBy,\r\n UpdateDate : req.UpdateDate,\r\n UpdateBy : req.UpdateBy,\r\n MultiDayBurnFlag : req.MultiDayBurnFlag,\r\n BurnPriority : req.BurnPriority,\r\n BurnRequestDate : req.BurnRequestDate,\r\n PlannedIgnitionDate : req.PlannedIgnitionDate,\r\n PlannedIgnitionPeriod : parseInt(req.PlannedIgnitionPeriod),\r\n PlannedIgnitionTime : req.PlannedIgnitionTime,\r\n SmokeDispersedFlag : req.SmokeDispersedFlag,\r\n TotalProposedBurnQuantity : req.TotalProposedBurnQuantity,\r\n ProposedBurnArea : parseInt(req.ProposedBurnArea),\r\n RequestorComments : req.RequestorComments,\r\n BurnPermitRequestLogNumber : req.BurnPermitRequestLogNumber,\r\n BurnPermitId : parseInt(req.BurnPermitId),\r\n DaysOfWeek : req.DaysOfWeek.toModelArray().map(d => d.DayOfWeekId),\r\n IsLocal : req.IsLocal,\r\n AutoGenerated : req.AutoGenerated,\r\n ParentRequestId : req.ParentRequestId,\r\n }\r\n}\r\n\r\nexport const burnRequestByIdSelector = ormByIdSelector(\r\n ({ BurnRequest, }, id) => {\r\n if (isNaN(id)) {\r\n return null\r\n }\r\n\r\n const req = BurnRequest.withId(id)\r\n return mapBurnRequest(req)\r\n }\r\n)\r\nexport const burnRequestModelByIdSelector = ormByIdSelector(\r\n ({ BurnRequest, }, id) => BurnRequest.withId(id)\r\n)\r\n\r\nexport const getPermitSummaryForRequest = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return null\r\n }\r\n\r\n const burnPermit = BurnPermit.withId(BurnPermitId)\r\n if (!burnPermit) {\r\n return null\r\n }\r\n\r\n const UnitName = burnPermit.BurnPermitSite ? burnPermit.BurnPermitSite.BurnUnitName || '' : ''\r\n \r\n let HarvestAcres = '', BurnTypes = []\r\n if (burnPermit.BurnPermitArea) {\r\n HarvestAcres = burnPermit.BurnPermitArea.HarvestAcres\r\n BurnTypes = burnPermit.BurnPermitArea.BurnTypes.toModelArray().join(', ')\r\n }\r\n \r\n let Burner = '', Agent = ''\r\n if (burnPermit.Burner) {\r\n Burner = `${burnPermit.Burner.PersonFirstName} ${burnPermit.Burner.PersonLastName}`\r\n }\r\n\r\n if (burnPermit.Agent) {\r\n Agent = `${burnPermit.Agent.PersonFirstName} ${burnPermit.Agent.PersonLastName}`\r\n }\r\n \r\n let Status = ''\r\n const currentStatus = burnPermit.BurnPermitStatusXrefs.orderBy('StatusDate', 'Desc').first()\r\n if (currentStatus && currentStatus.BurnPermitStatus) {\r\n Status = currentStatus.BurnPermitStatus.BurnPermitStatusName\r\n }\r\n\r\n let ForestHealthExempt\r\n if (burnPermit.ForestHealthExempt !== null) {\r\n // Migrated permits do not have problem types, so add a guard\r\n // to prevent spreading a non-iterable instance\r\n let ProblemType\r\n if (burnPermit.ForestHealthExempt.ForestHealthProblemTypes.exists()) {\r\n ProblemType = burnPermit.ForestHealthExempt.ForestHealthProblemTypes.first().ForestHealthExemptProblemTypeName\r\n }\r\n ForestHealthExempt = {\r\n AlternativeToRxFire : burnPermit.ForestHealthExempt.AlternativeToRxFire || '',\r\n AlternativeNotAppropriateReason : burnPermit.ForestHealthExempt.AlternativeNotAppropriateReason || '',\r\n ForestHealthExemptionApprovalFlag : burnPermit.ForestHealthExempt.ForestHealthExemptionApprovalFlag,\r\n ForestHealthExemptionApprovalDate : burnPermit.ForestHealthExempt.ForestHealthExemptionApprovalDate || burnPermit.ForestHealthExempt.CreateDate,\r\n ForestHealthExemptionApprovalBy : burnPermit.ForestHealthExempt.ForestHealthExemptionApprovalBy || burnPermit.ForestHealthExempt.CreateBy,\r\n ProblemType,\r\n }\r\n }\r\n\r\n let Latitude, Longitude\r\n if (burnPermit.BurnPermitLocation) {\r\n Latitude = burnPermit.BurnPermitLocation.Latitude\r\n Longitude = burnPermit.BurnPermitLocation.Longitude\r\n }\r\n \r\n const mapped = {\r\n BurnPermitId : burnPermit.BurnPermitId,\r\n BurnPermitNumber : burnPermit.BurnPermitNumber,\r\n TotalPermitTonnage : burnPermit.TotalPermitTonnage,\r\n BurnPermitValidDate : burnPermit.BurnPermitValidDate,\r\n BurnPermitExpirationDate : burnPermit.BurnPermitExpirationDate,\r\n MailPermitToLandownerFlag : burnPermit.MailPermitToLandownerFlag,\r\n MailPermitToAgentFlag : burnPermit.MailPermitToAgentFlag,\r\n Burner,\r\n Agent,\r\n HarvestAcres,\r\n BurnTypes,\r\n UnitName,\r\n Status,\r\n ForestHealthExempt,\r\n Latitude,\r\n Longitude,\r\n CreateBy : burnPermit.CreateBy,\r\n CreateDate : burnPermit.CreateDate,\r\n UpdateBy : burnPermit.UpdateBy,\r\n UpdateDate : burnPermit.UpdateDate,\r\n }\r\n return mapped\r\n }\r\n)\r\n\r\nexport const permitIsPileBurnOnly = ormByIdSelector(\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n if (isNaN(BurnPermitId)) {\r\n return null\r\n }\r\n\r\n const burnPermit = BurnPermit.withId(BurnPermitId)\r\n if (!burnPermit || !burnPermit.BurnPermitArea || !burnPermit.BurnPermitArea.BurnTypes) {\r\n return null\r\n }\r\n return burnPermit.BurnPermitArea.BurnTypes\r\n .all()\r\n .toRefArray()\r\n .map(t => t.BurnTypeName)\r\n .every(t => t === 'Pile')\r\n })\r\n\r\nexport const getBurnRequestStatusIdByName = ormWithPropSelector(\r\n ({ BurnRequestStatus, }, BurnRequestStatusName) => {\r\n const statuses = BurnRequestStatus.filter({ BurnRequestStatusName, })\r\n if (!statuses.exists()) {\r\n return null\r\n }\r\n return statuses.first().BurnRequestStatusId\r\n }\r\n)\r\n\r\nexport const burnRequestStatuses = ormWithPropSelector(\r\n ({ BurnRequestStatus, }, filter) => {\r\n let statuses = BurnRequestStatus.all()\r\n if (typeof filter === 'function') {\r\n statuses = statuses.filter(filter)\r\n }\r\n statuses = statuses\r\n .toModelArray()\r\n .map(s => {\r\n return {\r\n Value : s.BurnRequestStatusId,\r\n Text : s.BurnRequestStatusName,\r\n }\r\n })\r\n return statuses\r\n }\r\n)\r\n\r\nexport const burnRequestStatus = ormByIdSelector(\r\n ({ BurnRequestStatusXref, }, BurnRequestId) => {\r\n if (isNaN(BurnRequestId)) {\r\n return null\r\n }\r\n \r\n const statusXref = BurnRequestStatusXref\r\n .filter({ BurnRequestId, })\r\n .orderBy('CreateDate', 'desc')\r\n .first()\r\n\r\n if (!statusXref) {\r\n return null\r\n }\r\n\r\n let BurnRequestStatus = {}\r\n if (statusXref.BurnRequestRequestStatus) {\r\n BurnRequestStatus = statusXref.BurnRequestRequestStatus\r\n }\r\n\r\n return {\r\n BurnRequestStatusXrefId : statusXref.BurnRequestStatusXrefId,\r\n BurnRequestId : statusXref.BurnRequestId,\r\n StatusDate : statusXref.StatusDate,\r\n Comment : statusXref.Comment,\r\n Status : BurnRequestStatus.BurnRequestStatusName || '',\r\n BurnRequestStatusId : BurnRequestStatus.BurnRequestStatusId || '',\r\n CreateBy : statusXref.CreateBy,\r\n CreateDate : statusXref.CreateDate,\r\n UpdateBy : statusXref.UpdateBy,\r\n UpdateDate : statusXref.UpdateDate,\r\n }\r\n }\r\n)\r\n\r\nexport const burnRequestStatusHistory = ormByIdSelector(\r\n ({ BurnRequestStatusXref, }, BurnRequestId) => {\r\n if (isNaN(BurnRequestId)) {\r\n return null\r\n }\r\n \r\n const requestStatusXrefs = BurnRequestStatusXref.filter({ BurnRequestId, })\r\n if (!requestStatusXrefs.exists()) {\r\n return null\r\n }\r\n\r\n const statuses = []\r\n\r\n requestStatusXrefs\r\n .toModelArray()\r\n .forEach((x) => {\r\n let statusName = ''\r\n if (x.BurnRequestRequestStatus && !!x.BurnRequestRequestStatus.BurnRequestStatusName) {\r\n statusName = x.BurnRequestRequestStatus.BurnRequestStatusName\r\n }\r\n \r\n statuses.push({\r\n BurnRequestStatusXrefId : x.BurnRequestStatusXrefId,\r\n CreateBy : x.CreateBy,\r\n StatusDate : x.StatusDate,\r\n Comment : x.Comment,\r\n Status : statusName,\r\n BurnRequestStatusId : x.BurnRequestStatusId,\r\n BurnRequestId : x.BurnRequestId,\r\n InternalOnly : x.InternalOnly,\r\n AssignedTo : x.AssignedTo,\r\n })\r\n })\r\n\r\n // Order by StatusDate desc just in case\r\n const sortedStatuses = statuses\r\n .sort((a, b) => {\r\n if (a.StatusDate < b.StatusDate) {\r\n return 1\r\n }\r\n if (a.StatusDate > b.StatusDate) {\r\n return -1\r\n }\r\n return 0\r\n })\r\n return sortedStatuses\r\n }\r\n)\r\n\r\nexport const burnRequestCancellationReasonsForSelect = ormSelector(\r\n ({ BurnRequestCancellationReason, }) => {\r\n const reasons = BurnRequestCancellationReason.all()\r\n if (reasons.exists() !== true) {\r\n return []\r\n }\r\n return reasons\r\n .toModelArray()\r\n .map(s => {\r\n return {\r\n Value : s.BurnRequestCancellationReasonId,\r\n Text : `${s.BurnRequestCancellationReason} - ${s.BurnRequestCancellationReasonDescription}`,\r\n }\r\n })\r\n }\r\n)\r\n\r\n\r\nexport const burnRequestMapDataSelector = ormWithPropSelector(\r\n ({ BurnRequestSearch, }, showLandownerAgent) => {\r\n\r\n const fields = [\r\n {\r\n name : 'BurnPermitNumber',\r\n label : 'Burn Permit Number',\r\n },\r\n {\r\n name : 'Status',\r\n label : 'Status',\r\n },\r\n {\r\n name : 'StatusDate',\r\n label : 'Status Date',\r\n },\r\n {\r\n name : 'MultiDay',\r\n label : 'Multi Day Burn',\r\n },\r\n {\r\n name : 'HasPostBurn',\r\n label : 'Has Burned',\r\n },\r\n {\r\n name : 'BurnTypes',\r\n label : 'Burn Types',\r\n },\r\n {\r\n name : 'Address',\r\n label : 'Address',\r\n },\r\n {\r\n name : 'LegalDesc',\r\n label : 'Legal Desc.',\r\n },\r\n {\r\n name : 'HarvestAcres',\r\n label : 'Harvest Acres',\r\n },\r\n {\r\n name : 'ExpirationDate',\r\n label : 'Expiration Date',\r\n },\r\n {\r\n name : 'RequestedAcres',\r\n label : 'Requested Acres',\r\n },\r\n {\r\n name : 'TotalPermitTonnage',\r\n label : 'Est. Permit Tonnage',\r\n },\r\n {\r\n name : 'RequestedTons',\r\n label : 'Requested Tons',\r\n },\r\n {\r\n name : 'PlannedIgnitionDate',\r\n label : 'Planned Ignition Date',\r\n },\r\n {\r\n name : 'PlannedIgnitionTime',\r\n label : 'Planned Ignition Time',\r\n },\r\n {\r\n name : 'IsUGA',\r\n label : 'Is in UGA',\r\n },\r\n {\r\n name : 'IsForestHealthExempt',\r\n label : 'Is Forest Health Exempt',\r\n },\r\n {\r\n name : 'UnitName',\r\n label : 'Burn Unit Name',\r\n },\r\n {\r\n name : 'LatLong',\r\n label : 'Lat, Long',\r\n },\r\n ]\r\n\r\n if (showLandownerAgent) {\r\n const landowner = {\r\n name : 'Landowner',\r\n label : 'Landowner',\r\n }\r\n const agent = {\r\n name : 'Agent',\r\n label : 'Agent',\r\n }\r\n fields.splice(fields.findIndex(c => c.name === 'HasPostBurn'), 0, landowner)\r\n fields.splice(fields.findIndex(c => c.name === 'HasPostBurn'), 0, agent)\r\n }\r\n\r\n const layer = {\r\n layerId : 'BurnRequests',\r\n layerTitle : 'Burn Requests',\r\n data : [],\r\n fields,\r\n idField : 'BurnRequestId',\r\n title : 'Burn Request #{BurnRequestId}',\r\n }\r\n\r\n let data = BurnRequestSearch.all().filter(r => !!r.Longitude && !!r.Latitude)\r\n if (data.exists() === false) {\r\n return layer\r\n }\r\n data = data.toRefArray()\r\n \r\n for (let i = 0, len = data.length; i < len; i++) {\r\n const row = data[i]\r\n const {\r\n Latitude,\r\n Longitude,\r\n BurnPermitId,\r\n BurnPermitNumber,\r\n Address,\r\n BurnAcres,\r\n BurnTypes,\r\n BurnUnitName,\r\n BurnRequestId,\r\n BurnPermitExpirationDate,\r\n PlannedIgnitionDate,\r\n PlannedIgnitionTime,\r\n TotalPermitTonnage,\r\n RequestedAcres,\r\n RequestedTons,\r\n BurnRequestStatus,\r\n BurnRequestStatusDate,\r\n IsUGA,\r\n IsForestHealthExempt,\r\n } = row\r\n\r\n let Agent = '', Landowner = ''\r\n if (showLandownerAgent) {\r\n Agent = row.Agent\r\n Landowner = row.Landowner\r\n }\r\n \r\n const symbol = GetRequestSymbolByStatus(BurnRequestStatus, IsUGA)\r\n layer.data.push({\r\n geometry: {\r\n type : 'point',\r\n latitude : Latitude,\r\n longitude : Longitude,\r\n },\r\n attributes: {\r\n BurnRequestId : BurnRequestId.toString(),\r\n BurnPermitId : BurnPermitId.toString(),\r\n Agent,\r\n Landowner,\r\n BurnPermitNumber,\r\n BurnTypes,\r\n Address,\r\n PlannedIgnitionDate : dateFormatter(PlannedIgnitionDate, 'MMM DD, YYYY'),\r\n PlannedIgnitionTime,\r\n RequestedAcres,\r\n TotalPermitTonnage,\r\n RequestedTons,\r\n UnitName : BurnUnitName,\r\n LegalDesc : formatLegalDesc(row),\r\n Status : BurnRequestStatus,\r\n StatusDate : dateFormatter(BurnRequestStatusDate, 'MMM DD, YYYY'),\r\n ExpirationDate : dateFormatter(BurnPermitExpirationDate, 'MMM DD, YYYY'),\r\n HarvestAcres : BurnAcres,\r\n IsUGA : IsUGA ? 'Yes' : 'No',\r\n IsForestHealthExempt : IsForestHealthExempt === null ? 'N/A' : IsForestHealthExempt ? 'Yes' : 'No',\r\n LatLong : `${Latitude}, ${Longitude}`,\r\n },\r\n symbol,\r\n })\r\n }\r\n \r\n return layer\r\n }\r\n)\r\n\r\nexport const burnRequestHasPostBurn = ormByIdSelector(\r\n ({ BurnRequest, }, BurnRequestId) => {\r\n if (isNaN(BurnRequestId)) {\r\n return false\r\n }\r\n const req = BurnRequest.withId(BurnRequestId)\r\n if (!req) {\r\n return false\r\n }\r\n\r\n return req.PostBurns.filter(pb => { return pb.IsLocal !== true }).exists()\r\n }\r\n)\r\n\r\nexport const burnRequestStatusObjSelector = ormByIdSelector(\r\n burnRequestStatus,\r\n (orm, burnRequestId, status) => {\r\n let statusObj = {\r\n IsCancelled : false,\r\n IsSubmitted : false,\r\n IsApproved : false,\r\n IsInfoRequired : false,\r\n IsUnderReview : false,\r\n IsLocked : false,\r\n }\r\n if (isNaN(burnRequestId) || !status || !status.Status) {\r\n return statusObj\r\n }\r\n statusObj.IsDenied = status.Status === 'Denied'\r\n statusObj.IsCancelled = status.Status === 'Cancelled'\r\n statusObj.IsSubmitted = status.Status === 'Submitted'\r\n statusObj.IsApproved = status.Status === 'Approved'\r\n statusObj.IsInfoRequired = status.Status === 'Info Required'\r\n statusObj.IsUnderReview = status.Status === 'Under Review'\r\n statusObj.IsLocked = status.Status === 'Locked'\r\n return statusObj\r\n }\r\n)\r\n\r\nexport const burnRequestIsApproved = ormByIdSelector(\r\n ({ BurnRequestStatusXref, }, BurnRequestId) => {\r\n const statuses = BurnRequestStatusXref\r\n .orderBy('StatusDate', 'desc')\r\n .all()\r\n .toModelArray()\r\n .filter(x => {\r\n return x.BurnRequestId === BurnRequestId\r\n })\r\n .slice(0, 2)\r\n\r\n if (statuses.length < 2) {\r\n return false\r\n }\r\n return statuses.every(s => s.BurnRequestRequestStatus.BurnRequestStatusName === 'Approved')\r\n }\r\n)\r\n\r\nexport const burnRequestInPersonsRegion = ormWithPropSelector(\r\n (state, reqId, personId) => personId,\r\n ({ BurnRequest, PersonRegionXref, }, BurnRequestId, PersonId) => {\r\n let canAccessBurnReq = false\r\n const burnReq = BurnRequest.withId(BurnRequestId)\r\n let permitRegionId\r\n if (burnReq.BurnPermit.BurnPermitLocation) {\r\n permitRegionId = burnReq.BurnPermit.BurnPermitLocation.RegionId\r\n }\r\n const personRegion = PersonRegionXref.filter({ PersonRegionXrefPersonId: PersonId, }).first()\r\n if (personRegion) {\r\n canAccessBurnReq = personRegion.PersonRegionXrefRegionId === permitRegionId\r\n }\r\n return canAccessBurnReq\r\n }\r\n)\r\n\r\nexport const burnRequestRegion = ormWithPropSelector(\r\n ({ BurnRequest, }, BurnRequestId) => {\r\n const burnReq = BurnRequest.withId(BurnRequestId)\r\n let permitRegionId\r\n if (burnReq.BurnPermit.BurnPermitLocation) {\r\n permitRegionId = burnReq.BurnPermit.BurnPermitLocation.RegionId\r\n }\r\n return permitRegionId\r\n }\r\n)\r\n\r\nexport const burnRequestValSchemaSelector = ormSelector(\r\n userCanEnterAnyIgnDate,\r\n ({ BurnRequest, }, isDnr) => {\r\n if (!BurnRequest || !BurnRequest.getValidationSchema || (typeof BurnRequest.getValidationSchema !== 'function')){\r\n return null\r\n }\r\n return BurnRequest.getValidationSchema(isDnr)\r\n }\r\n)\r\n\r\n/** \r\n * Determine if a request can be submitted with the slected permit\r\n * without the applicant's signature\r\n */\r\nexport const reqCanSubmitWithoutSignature = ormSelector(\r\n (session, id) => id,\r\n userCanBypassSignature,\r\n ({ BurnRequest, Person, PersonAgencyXref, BurnPermit, }, permitId, canBypass) => {\r\n if (!BurnRequest || !BurnPermit || !Person || !PersonAgencyXref || isNaN(permitId)) {\r\n return false\r\n } \r\n \r\n // can only submit request without signature as DNR or a Verified Gov Agent\r\n if (!canBypass) {\r\n return false\r\n }\r\n\r\n // if permit isn't loaded, don't submit request\r\n const permit = BurnPermit.withId(permitId)\r\n if (!permit) {\r\n return false\r\n }\r\n\r\n // permit must be issued or extended to submit the request\r\n const currentStatus = permit.BurnPermitStatusXrefs.orderBy('StatusDate', 'Desc').first()\r\n if (!currentStatus || (currentStatus.BurnPermitStatus && currentStatus.BurnPermitStatus.BurnPermitStatusName !== 'Issued' && currentStatus.BurnPermitStatus.BurnPermitStatusName !== 'Extended')) {\r\n return false\r\n }\r\n\r\n const agent = permit.Agent\r\n const burner = permit.Burner\r\n\r\n // permit is ok, if either agent or burner is a gov agency user then allow\r\n if (agent && agent.PersonType && agent.PersonType.PersonTypeName === PERSON_TYPE_GOV_AGENT) {\r\n const xref = PersonAgencyXref.filter(x => x.PersonAgencyXrefPersonId === agent.PersonId).first()\r\n if (xref && !!xref.ConfirmedBy && !!xref.ConfirmedOn){\r\n return true\r\n }\r\n } \r\n if (burner && burner.PersonType && burner.PersonType.PersonTypeName === PERSON_TYPE_GOV_AGENT) {\r\n const xref = PersonAgencyXref.filter(x => x.PersonAgencyXrefPersonId === burner.PersonId).first()\r\n if (xref && !!xref.ConfirmedBy && !!xref.ConfirmedOn){\r\n return true\r\n }\r\n }\r\n\r\n // neither agent or burner is an agency user\r\n return false\r\n }\r\n)","import { ormByIdSelector, getValueOrDefault, ormSelector, } from './selectors'\r\nimport { createSelector, } from 'reselect'\r\nimport { mapBurnRequest, } from './burnRequestSelectors'\r\nimport { dateFormatter, } from '../utilities'\r\n\r\n// base selector\r\nconst postBurnStateSelector = state => state.PostBurn\r\n\r\nexport const submittingPostburnsSelector = createSelector(\r\n postBurnStateSelector,\r\n state => state ? state.SubmittingPostBurns : [] \r\n)\r\n\r\n/* active post burn id */\r\nconst activePostBurnIdSelector = createSelector(\r\n postBurnStateSelector,\r\n state => state ? state.ActivePostBurnId : -1\r\n)\r\n\r\nexport const localPostBurnByPermitIdSelector = ormByIdSelector(\r\n (orm, id, burnRequestId) => burnRequestId,\r\n ({ PostBurn, }, burnPermitId, burnRequestId) => {\r\n const qs = PostBurn.filter({\r\n IsLocal : true,\r\n BurnPermitId : burnPermitId,\r\n BurnRequestId : burnRequestId,\r\n })\r\n if (qs.exists()) {\r\n return qs.first()\r\n }\r\n return null\r\n }\r\n)\r\n\r\n/* active post burn model */\r\nconst activePostBurnModelSelector = ormSelector(\r\n activePostBurnIdSelector,\r\n ({ PostBurn, }, PostBurnId) => {\r\n let postBurn = null\r\n if (PostBurnId && PostBurn) {\r\n postBurn = PostBurn.withId(PostBurnId)\r\n }\r\n return postBurn\r\n } \r\n)\r\n\r\nexport const activePostBurnIsLocal = ormSelector(\r\n activePostBurnModelSelector,\r\n (orm, postBurn) => (postBurn && postBurn.IsLocal === true)\r\n)\r\n\r\nexport const postBurnByIdSelector = ormByIdSelector(\r\n ({ PostBurn, }, PostBurnId) => {\r\n let postBurn = null\r\n if (PostBurnId && PostBurn) {\r\n postBurn = PostBurn.withId(PostBurnId)\r\n }\r\n return postBurn\r\n } \r\n)\r\n\r\n/* active burn request id */\r\nconst activePostBurnRequestIdSelector = createSelector(\r\n postBurnStateSelector,\r\n state => state ? state.ActiveRequestId : -1\r\n)\r\n\r\n/* active burn request model */\r\nconst activePostBurnRequestModelSelector = ormSelector(\r\n activePostBurnRequestIdSelector,\r\n ({ BurnRequest, }, BurnRequestId) => {\r\n let burnRequest = null\r\n if (BurnRequestId && BurnRequest) {\r\n burnRequest = BurnRequest.withId(BurnRequestId)\r\n }\r\n return burnRequest\r\n } \r\n)\r\n\r\nexport const activePostBurnRequestSelector = ormSelector(\r\n activePostBurnRequestModelSelector,\r\n (orm, request) => {\r\n return mapBurnRequest(request) \r\n }\r\n)\r\n\r\n/* get active permit id */\r\nexport const activePostBurnPermitIdSelector = createSelector(\r\n postBurnStateSelector,\r\n state => state ? state.ActivePermitId : -1\r\n)\r\n\r\n/* get active permit model */\r\nconst activePostBurnPermitModelSelector = ormSelector(\r\n activePostBurnPermitIdSelector,\r\n ({ BurnPermit, }, BurnPermitId) => {\r\n let burnPermit = null\r\n if (BurnPermitId && BurnPermit) {\r\n burnPermit = BurnPermit.withId(BurnPermitId)\r\n }\r\n return burnPermit\r\n } \r\n)\r\n\r\nexport const postBurnByActivePermitRequest = ormSelector(\r\n activePostBurnPermitIdSelector,\r\n activePostBurnRequestIdSelector,\r\n ({ PostBurn, }, BurnPermitId, BurnRequestId) => {\r\n if (BurnPermitId > 0) {\r\n return PostBurn.filter({ BurnPermitId, BurnRequestId, }).first()\r\n }\r\n return null\r\n }\r\n)\r\n\r\nexport const postBurnPromptSelector = createSelector(\r\n postBurnStateSelector,\r\n (state) => state ? state.postBurnPrompt ? state.postBurnPrompt : [] : []\r\n)\r\n\r\nexport const postBurnLoadingSelector = createSelector(\r\n postBurnStateSelector,\r\n (state) => state ? state.PostBurnIsLoading ? state.PostBurnIsLoading : false : false\r\n)\r\n\r\nexport const activePostBurnIds = createSelector(\r\n activePostBurnIdSelector,\r\n activePostBurnRequestIdSelector,\r\n activePostBurnPermitIdSelector,\r\n (PostBurnId, BurnRequestId, BurnPermitId) => {\r\n return {\r\n PostBurnId,\r\n BurnRequestId,\r\n BurnPermitId,\r\n }\r\n }\r\n)\r\n\r\nconst formatTime = (time) => {\r\n if (!time) {\r\n return ''\r\n }\r\n const fmtTime = time.toString().replace(/:/gi, '')\r\n if (fmtTime.length === 6) {\r\n return fmtTime.substring(0, 4)\r\n }\r\n if (fmtTime.length < 4) {\r\n return `0${fmtTime}` \r\n }\r\n return fmtTime\r\n}\r\n\r\nexport const postBurnDDLSelector = ormSelector(\r\n activePostBurnPermitIdSelector,\r\n submittingPostburnsSelector,\r\n ({ BurnPermit, }, BurnPermitId, submittingPostBurns) => {\r\n const permit = BurnPermit.withId(BurnPermitId)\r\n if (!permit){\r\n return []\r\n }\r\n const allBurnRequests = permit.BurnRequests.all().toModelArray()\r\n .filter(r => {\r\n if (r.AutoGenerated === true) {\r\n return true\r\n }\r\n if (!r.BurnRequestStatusXrefs || !r.BurnRequestStatusXrefs.exists()) {\r\n return false\r\n }\r\n const status = r.BurnRequestStatusXrefs.orderBy('StatusDate', 'desc').first()\r\n if (!status || !status.BurnRequestRequestStatus) {\r\n return false\r\n }\r\n return true\r\n })\r\n\r\n const { BurnPermitPile, BurnPermitArea, } = permit\r\n const isPileType = BurnPermitArea ? BurnPermitArea.BurnTypes.filter(t => t.BurnTypeName === 'Pile').exists() : false\r\n const pileCount = BurnPermitPile ? BurnPermitPile.TotalNumberBurnPiles : 'Unknown'\r\n const pileString = (isPileType && BurnPermitPile) ? `${pileCount} piles totalling ` : ''\r\n const noReqPostBurnQuery = permit.PostBurns.filter({ BurnRequestId: -1, })\r\n\r\n const burnRequests = allBurnRequests.map(r => {\r\n let Text = `#${r.BurnRequestId}`, Group = 'No Post Burn', burnDetails = `${pileString}`\r\n const pb = r.PostBurns.first()\r\n if (pb && pb.IsLocal !== true) {\r\n const reportDate = dateFormatter(pb.UpdateDate || pb.CreateDate, 'MM/DD/YYYY')\r\n const ignitedDate = dateFormatter(pb.BurnDate, 'MM/DD/YYYY')\r\n burnDetails += `${pb.ConsumedTons} tons over ${pb.BurnedBlackAcres || r.ProposedBurnArea} acres`\r\n Text += ` Reported ${reportDate} - Ignited ${ignitedDate} - ${burnDetails}`\r\n Group = 'Has Post Burn'\r\n if (pb.BurnDate && (pb.ConsumedTons === 0 || pb.DidNotBurn)) {\r\n Group = 'Did Not Burn'\r\n Text = `#${r.BurnRequestId} Reported ${ignitedDate} - Not Burned`\r\n }\r\n } else {\r\n if (pb && submittingPostBurns.includes(pb.PostBurnId)) {\r\n Group = 'Post Burn Pending Submission'\r\n }\r\n burnDetails += `${r.TotalProposedBurnQuantity} tons over ${r.ProposedBurnArea} acres`\r\n Text += ` Planned ignition on ${dateFormatter(r.PlannedIgnitionDate, 'MM/DD/YYYY')} - ${burnDetails}`\r\n }\r\n return { Text, Group, Value: r.BurnRequestId, }\r\n })\r\n let noRequestGroup = 'No Post Burn'\r\n if (noReqPostBurnQuery.exists()){\r\n let nrpb = noReqPostBurnQuery.first()\r\n if (nrpb && submittingPostBurns.includes(nrpb.PostBurnId)) {\r\n noRequestGroup = 'Post Burn Pending Submission'\r\n }\r\n }\r\n burnRequests.push({ Text: 'No Burn Request', Group: noRequestGroup, Value: 'norequest', })\r\n return burnRequests\r\n }\r\n)\r\n\r\nconst mapPostBurn = (pb = null, req = null, pmt = null) => {\r\n if (!pb && !req) {\r\n return null\r\n }\r\n let postBurn = {}\r\n\r\n let p = null\r\n if (pb) {\r\n p = pb\r\n } else if (req && req.PostBurns.all().exists()) {\r\n p = req.PostBurns.first()\r\n } else {\r\n return null\r\n }\r\n\r\n if (p) {\r\n postBurn = {\r\n PostBurnId : p.PostBurnId,\r\n BurnPermitId : p.BurnPermitId,\r\n BurnRequestId : p.BurnRequestId,\r\n CreateDate : p.CreateDate,\r\n CreateBy : p.CreateBy,\r\n UpdateDate : p.UpdateDate,\r\n UpdateBy : p.UpdateBy,\r\n PilesIgnitedPercent : getValueOrDefault(p.PilesIgnitedPercent, ''),\r\n BurnTime : formatTime(p.BurnTime),\r\n IgnitionPeriod : getValueOrDefault(p.IgnitionPeriod, ''),\r\n ConsumedTons : getValueOrDefault(p.ConsumedTons, ''),\r\n BurnedBlackPercent : getValueOrDefault(p.BurnedBlackPercent, ''),\r\n BurnedBlackAcres : getValueOrDefault(p.BurnedBlackAcres, ''),\r\n BurnedBlackPilePercent : getValueOrDefault(p.BurnedBlackPilePercent, ''),\r\n BurnedBlackCanopyPercent : getValueOrDefault(p.BurnedBlackCanopyPercent, ''),\r\n BurnedBlackShrubPercent : getValueOrDefault(p.BurnedBlackShrubPercent, ''),\r\n FuelMoistureMethod : getValueOrDefault(p.FuelMoistureMethod, ''),\r\n WeatherCollectionMethod : getValueOrDefault(p.WeatherCollectionMethod, ''),\r\n WeatherStationName : getValueOrDefault(p.WeatherStationName, ''),\r\n WindSpeedMph : getValueOrDefault(p.WindSpeedMph, ''),\r\n NumberDaysSinceRain : getValueOrDefault(p.NumberDaysSinceRain, ''),\r\n TenHourFuelMoisturePercent : getValueOrDefault(p.TenHourFuelMoisturePercent, ''),\r\n ThousandHourFuelMoisturePercent : getValueOrDefault(p.ThousandHourFuelMoisturePercent, ''),\r\n DuffFuelMoisturePercent : getValueOrDefault(p.DuffFuelMoisturePercent, ''),\r\n MidflameWindSpeed : getValueOrDefault(p.MidflameWindSpeed, ''),\r\n PostBurnComments : getValueOrDefault(p.PostBurnComments, ''),\r\n DidNotBurnReason : getValueOrDefault(p.DidNotBurnReason, ''),\r\n IsLocal : p.IsLocal,\r\n }\r\n }\r\n\r\n if (req && !p) {\r\n postBurn['BurnDate'] = dateFormatter(req.PlannedIgnitionDate || '', 'YYYY-MM-DD')\r\n } else if (p) {\r\n postBurn['BurnDate'] = dateFormatter(p.BurnDate || '', 'YYYY-MM-DD')\r\n } else {\r\n postBurn['BurnDate'] = ''\r\n }\r\n\r\n postBurn['TotalPileConsumedTons'] = 0\r\n if (req) {\r\n if (req.BurnPermit && req.BurnPermit.BurnPermitPileGroups && req.BurnPermit.BurnPermitPileGroups.exists()) {\r\n postBurn.TotalPileConsumedTons = req.BurnPermit.BurnPermitPileGroups.toRefArray()\r\n .map(g => g.ConsumedFuel)\r\n .reduce((tons, total) => total + tons, 0)\r\n }\r\n postBurn['PlannedIgnitionDate'] = req.PlannedIgnitionDate\r\n postBurn['MultiDayBurnFlag'] = req.MultiDayBurnFlag || false\r\n postBurn['TotalPermitTonnage'] = req.BurnPermit ? req.BurnPermit.TotalPermitTonnage : 0\r\n postBurn['TotalTonsPerAcre'] = req.BurnPermit && req.BurnPermit.BurnPermitFuel ? req.BurnPermit.BurnPermitFuel.TotalTonsPerAcre : 0\r\n postBurn['ProposedBurnArea'] = getValueOrDefault(req.ProposedBurnArea, 0)\r\n postBurn['DidNotBurn'] = req.DidNotBurn || false\r\n } else {\r\n postBurn['PlannedIgnitionDate'] = Date.now()\r\n postBurn['MultiDayBurnFlag'] = false\r\n postBurn['TotalPermitTonnage'] = pmt ? pmt.TotalPermitTonnage : 0\r\n postBurn['TotalTonsPerAcre'] = pmt && pmt.BurnPermitFuel ? pmt.BurnPermitFuel.TotalTonsPerAcre : 0\r\n postBurn['ProposedBurnArea'] = 0\r\n postBurn['DidNotBurn'] = false\r\n }\r\n\r\n return postBurn\r\n}\r\n\r\nexport const postBurnByRequestIdSelector = ormSelector(\r\n activePostBurnModelSelector,\r\n activePostBurnRequestModelSelector,\r\n activePostBurnPermitModelSelector,\r\n (orm, p, req, pmt) => mapPostBurn(p, req, pmt)\r\n)\r\n\r\nexport const haveRequestDataForPostBurn = ormSelector(\r\n activePostBurnRequestModelSelector,\r\n (orm, request) => {\r\n if (!request) {\r\n return false\r\n }\r\n const allDataExists = []\r\n allDataExists.push(request.PlannedIgnitionDate !== null)\r\n allDataExists.push(request.MultiDayBurnFlag !== null)\r\n allDataExists.push(request.ProposedBurnArea !== null)\r\n allDataExists.push(request.PostBurns.all().exists())\r\n return allDataExists.every(d => d)\r\n }\r\n)\r\n\r\nexport const havePermitDataForPostBurn = ormSelector(\r\n activePostBurnPermitModelSelector,\r\n (orm, permit) => {\r\n if (!permit) {\r\n return false\r\n }\r\n const allDataExists = []\r\n \r\n allDataExists.push(permit.BurnPermitPileGroups.exists())\r\n allDataExists.push(permit.BurnPermitFuelId !== null && permit.BurnPermitFuel != null)\r\n allDataExists.push(permit.BurnPermitAreaId !== null && permit.BurnPermitArea != null)\r\n\r\n return allDataExists.every(d => d)\r\n }\r\n)\r\n","// Libraries\r\nimport { put, call, select, takeLatest, all, takeEvery, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { hideLoading, showLoading, } from './AppSagas'\r\nimport { doFetch, getLookupData, showError, extractPayload, } from './ApiSagas'\r\nimport { destroyLocalModels, createLocalModel, replaceAll, } from './OrmSagas'\r\nimport { getBurnPermitInfo, } from './BurnRequestDetailSagas'\r\nimport { getBurnPileGroups, } from './BurnPermitPileGroupSagas'\r\nimport { getBurnPermitFuelsInfo, } from './BurnPermitFuelsSagas'\r\nimport { apiResponseIsAuthorized, } from './ApiSagas'\r\n\r\n// Reducers\r\nimport { OrmTypes, } from '../redux/OrmRedux'\r\nimport AppActions, { AppTypes, } from '../redux/AppRedux'\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport BurnRequestDetailActions from '../redux/BurnRequestDetailRedux'\r\nimport PostBurnActions, { PostBurnTypes, } from '../redux/PostBurnRedux'\r\n\r\n// Selectors\r\nimport { \r\n networkStateSelector, \r\n permitIdAndSectionIdsByPermitIdSelector, \r\n getBurnPermitId, \r\n permitByBurnPermitNumberSelector, \r\n} from '../selectors/selectors'\r\nimport { \r\n activePostBurnPermitIdSelector,\r\n havePermitDataForPostBurn,\r\n postBurnByIdSelector,\r\n postBurnByActivePermitRequest,\r\n activePostBurnIds,\r\n localPostBurnByPermitIdSelector,\r\n} from '../selectors/postBurnSelectors'\r\nimport { burnRequestModelByIdSelector, } from '../selectors/burnRequestSelectors'\r\n\r\n// Models\r\nimport PostBurn from '../models/PostBurn'\r\nimport BurnPermit from '../models/BurnPermit'\r\n\r\n\r\n// CONSTANTS\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\nconst POST_BURN_MODEL_NAME = PostBurn.modelName\r\nconst POST_BURN_LOADING_COMPLETE = PostBurnActions.postBurnLoadingComplete()\r\nconst POST_BURN_LOADING = PostBurnActions.postBurnLoading()\r\nconst HIDE_LOADING = AppActions.hideLoading()\r\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\r\nconst POST_BURN_ENDPOINT = PostBurn.endpoint()\r\n\r\nfunction* cancelPostBurnSubmit ({ id, }) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : PostBurnTypes.CREATE_POST_BURN_REQUEST,\r\n url : POST_BURN_ENDPOINT,\r\n method : 'POST',\r\n keyName : 'PostBurnId',\r\n keyValue : id,\r\n })\r\n}\r\n\r\nfunction* getPostBurnsByRequestIdSuccess (resp) {\r\n const { payload, } = resp\r\n if (isNaN(resp.burnRequestId)) {\r\n yield call(showError, 'Received invalid response retrieving Post-Burn for Burn Request.')\r\n return\r\n }\r\n\r\n // If a post burn is not found, that's fine, the user will be creating one\r\n if (payload.status === 404) {\r\n yield call(destroyLocalModels, POST_BURN_MODEL_NAME, { BurnRequestId: resp.burnRequestId, })\r\n const burnPermitId = yield select(activePostBurnPermitIdSelector)\r\n if (burnPermitId) {\r\n yield call(createLocalModel, POST_BURN_MODEL_NAME, { BurnRequestId: resp.burnRequestId, BurnPermitId: burnPermitId, IsLocal: true, })\r\n }\r\n return\r\n }\r\n\r\n\r\n const postBurn = yield call([ payload, payload.json, ])\r\n yield call(destroyLocalPostBurns, resp.burnRequestId)\r\n yield put(PostBurnActions.postBurnSubmitted(postBurn.PostBurnId))\r\n yield call(upsertPostBurns, postBurn, resp.burnRequestId)\r\n}\r\n\r\nfunction* upsertPostBurns (postBurns, BurnRequestId, BurnPermitId = null) { \r\n if (Array.isArray(postBurns)) {\r\n let filterObj = null\r\n if (BurnRequestId && BurnRequestId > 0) {\r\n if (filterObj){\r\n filterObj['BurnRequestId'] = BurnRequestId\r\n } else {\r\n filterObj = { BurnRequestId, }\r\n }\r\n } \r\n if (BurnPermitId && BurnPermitId > 0) {\r\n if (filterObj) {\r\n filterObj['BurnPermitId'] = BurnPermitId\r\n } else {\r\n filterObj = { BurnPermitId, }\r\n }\r\n }\r\n yield call(replaceAll, POST_BURN_MODEL_NAME, postBurns, filterObj)\r\n } else if (postBurns) {\r\n yield put({ type: OrmTypes.UPSERT, modelName: 'PostBurn', properties: postBurns, })\r\n }\r\n}\r\n\r\nfunction* preflight (PostBurnId) {\r\n // if offline, show toast to user letting them know it will\r\n // be created once they come back online.\r\n // Otherwise, show loading indicators\r\n const { online, } = yield select(networkStateSelector)\r\n if (online) {\r\n yield put(POST_BURN_LOADING)\r\n yield call(showLoading)\r\n }\r\n else {\r\n const message = 'Your create Post Burn request is queued. Once your device regains internet connectivity, the request will be submitted.'\r\n yield put({ type: ApiTypes.OFFLINE_MESSAGE, message, })\r\n yield put(PostBurnActions.submittingPostBurns(PostBurnId))\r\n }\r\n}\r\n\r\nfunction* createPostBurn ({ postBurnObj, }) {\r\n const { PostBurnId, } = postBurnObj\r\n yield call(preflight, PostBurnId)\r\n yield call(upsertPostBurns, postBurnObj)\r\n // Because the Type for the createPostBurnRequest is declared as part of the custom config,\r\n // we have to put a dispatch action rather than call the type in order for redux to react pick it up\r\n const body = { ...postBurnObj, PostBurnId: 0, }\r\n yield put(PostBurnActions.createPostBurnRequest(body))\r\n}\r\n\r\nfunction* postBurnRequestFail ({ payload, }) {\r\n const { error, } = yield call([ payload, payload.json, ])\r\n // If we want to do anything locally based on the error response, here is a place we can do that\r\n yield call(showError, error)\r\n yield put(HIDE_LOADING)\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n}\r\n\r\nfunction* postBurnRequestSuccess (resp) {\r\n try {\r\n const postBurn = yield call(extractPayload, resp)\r\n if (postBurn) {\r\n // upsert the new post burn\r\n yield call(upsertPostBurns, postBurn, postBurn.BurnRequestId)\r\n const localPostBurn = yield select(localPostBurnByPermitIdSelector, postBurn.BurnPermitId, postBurn.BurnRequestId)\r\n if (localPostBurn) {\r\n yield call(destroyLocalPostBurns, localPostBurn.BurnRequestId, localPostBurn.BurnPermitId)\r\n yield put(PostBurnActions.postBurnSubmitted(localPostBurn.PostBurnId))\r\n } else {\r\n yield put(PostBurnActions.postBurnSubmitted(postBurn.PostBurnId))\r\n }\r\n\r\n yield call(getPostBurnPrompts, postBurn.BurnPermitId)\r\n yield put(PostBurnActions.initializePostBurnForm(postBurn.BurnPermitId, postBurn.BurnRequestId, postBurn.PostBurnId))\r\n }\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put(HIDE_LOADING)\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n }\r\n}\r\n\r\nfunction* updatePostBurn ({ postBurnId, postBurnObj, }) {\r\n yield preflight(postBurnId)\r\n yield call(upsertPostBurns, postBurnObj)\r\n // Because the Type for the updatePostBurnRequest is declared as part of the custom config,\r\n // we have to put a dispatch action rather than call the type in order for redux to react pick it up\r\n yield put(PostBurnActions.updatePostBurnRequest(postBurnId, postBurnObj))\r\n}\r\n\r\n/**\r\n * Gather burn permit information and set the active permit Id\r\n * for the post burn form when provided a burn permit number\r\n */\r\nfunction* activatePostBurnPermitByNumber ({ number = null, }) {\r\n if (!number) {\r\n yield call(showError, 'No permit number was provided.')\r\n return\r\n }\r\n yield put(POST_BURN_LOADING)\r\n \r\n const { online, } = yield select(networkStateSelector)\r\n if (!online){\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n return\r\n }\r\n\r\n yield all([\r\n call(getLookupData, { modelName: 'BurnRequestStatus', }),\r\n call(getBurnPermitInfo, { burnPermitNumber: number, }),\r\n ])\r\n const burnPermit = yield select(permitByBurnPermitNumberSelector, number)\r\n if (!burnPermit || !burnPermit.BurnPermitId){\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n yield call(showError, `Unable to retrieve information for Permit #${number}`)\r\n return\r\n }\r\n yield put(PostBurnActions.setPostBurnPermitId(burnPermit.BurnPermitId))\r\n\r\n yield all([\r\n call(getBurnRequestsForPermit, { id: burnPermit.BurnPermitId, }),\r\n call(getPostBurnPrompts, burnPermit.BurnPermitId),\r\n call(getBurnPermitInfoForPostBurn, burnPermit.BurnPermitId),\r\n ])\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n}\r\n\r\n/**\r\n * Set the Permit ID and gather for the post burn form\r\n * If only a number is provided, do extra steps to get the ID\r\n * If the id/number are invalid or not provided, set the active\r\n * permit ID to -1 as expected in the display code\r\n */\r\nfunction* setPostBurnPermitByNumber ({ number = null, }) {\r\n const { online, } = yield select(networkStateSelector)\r\n if (online) {\r\n if (number && number.length > 0) {\r\n yield call(activatePostBurnPermitByNumber, { number, } )\r\n } else {\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n }\r\n } else {\r\n if (number && number.length > 0) {\r\n const burnPermit = yield select(permitByBurnPermitNumberSelector, number)\r\n if (!burnPermit || !burnPermit.BurnPermitId){\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n yield call(showError, `Unable to retrieve information for Permit #${number} while offline.`)\r\n return\r\n }\r\n yield put(PostBurnActions.setPostBurnPermitId(burnPermit.BurnPermitId))\r\n }\r\n }\r\n}\r\n\r\nfunction* getPostBurnPrompts (permitId = null, loading = false) {\r\n try {\r\n if (loading) {\r\n yield put(POST_BURN_LOADING)\r\n yield call(showLoading)\r\n }\r\n\r\n let url = `${REACT_APP_SERVER_URL}PostBurnReports/Statuses`\r\n if (permitId && !isNaN(permitId) && permitId > 0) {\r\n url = `${url}/${permitId}`\r\n }\r\n const response = yield call(doFetch, url)\r\n if (!response.ok || response.statusCode !== 200) {\r\n yield call(showError, 'An error occurred requesting Post Burn statuses.')\r\n return\r\n }\r\n const promptObjs = response.responseBody\r\n\r\n if (Array.isArray(promptObjs) && promptObjs.length) {\r\n yield put(PostBurnActions.setPostBurnPrompt(promptObjs))\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n if (loading) {\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n }\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nexport function* getPostBurnsByPermit ({ permitId = null, permitNumber = null, }) {\r\n try {\r\n if (!Number.isInteger(permitId)) {\r\n permitId = yield select(getBurnPermitId, { BurnPermitNumber: permitNumber, })\r\n }\r\n const response = yield call(doFetch, `${BURN_PERMIT_ENDPOINT}/${permitId}/PostBurn`)\r\n\r\n if (!response.ok || (response.statusCode !== 200 && response.statusCode !== 404)) {\r\n let error = `An error occurred requesting Post Burns for Permit Id ${permitId}`\r\n if (response.responseBody && response.responseBody.error) {\r\n error = response.responseBody.error\r\n }\r\n yield call(showError, error)\r\n return\r\n }\r\n const postBurns = response.responseBody\r\n if (Array.isArray(postBurns) && postBurns.length) {\r\n yield call(replaceAll, POST_BURN_MODEL_NAME, postBurns, { BurnPermitId: permitId, })\r\n }\r\n \r\n yield all([\r\n call(getBurnPermitInfoForPostBurn, permitId),\r\n call(setOrCreateActivePostBurn),\r\n ])\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* setOrCreateActivePostBurn () {\r\n const { BurnPermitId, BurnRequestId, } = yield select(activePostBurnIds)\r\n\r\n let id = -1\r\n if (BurnPermitId > 0) {\r\n const postBurn = yield select(postBurnByActivePermitRequest)\r\n if (postBurn){ \r\n id = postBurn.PostBurnId\r\n }\r\n }\r\n if (id === -1) {\r\n const objToCreate = {\r\n IsLocal : true,\r\n BurnRequestId : BurnRequestId || -1,\r\n BurnPermitId : BurnPermitId || -1,\r\n }\r\n const newModel = yield call(createLocalModel, POST_BURN_MODEL_NAME, objToCreate)\r\n id = newModel.PostBurnId\r\n }\r\n yield put(PostBurnActions.setPostBurnId(id))\r\n}\r\n\r\nfunction* getPostBurnStatusesForUser () {\r\n yield call(getPostBurnPrompts, null, true)\r\n}\r\n\r\nfunction* getBurnRequestsForPermit ({ id, }) {\r\n try {\r\n if (isNaN(parseInt(id))) {\r\n yield call(showError, 'You must supply a Burn Permit ID to retrieve Burn Request data.')\r\n return\r\n }\r\n \r\n yield put(POST_BURN_LOADING)\r\n yield call(showLoading)\r\n\r\n const burnRequestUrl = `${REACT_APP_SERVER_URL}BurnPermits/${id}/Requests`\r\n const burnRequestResponse = yield call(doFetch, burnRequestUrl)\r\n\r\n if ((burnRequestResponse.statusCode !== 404) && (burnRequestResponse.statusCode !== 200)) {\r\n yield call(showError, 'Received a bad response from the Burn Request endpoint.')\r\n return\r\n }\r\n if ((burnRequestResponse.statusCode === 200) && burnRequestResponse.responseBody && (burnRequestResponse.responseBody.length > 0)) {\r\n let ack = {\r\n BurnRequests : [],\r\n BurnRequestStatusXrefs : [],\r\n PostBurns : [],\r\n }\r\n burnRequestResponse.responseBody.forEach((r) => {\r\n const xrefs = r.BurnRequestStatusXrefs\r\n const postBurns = r.PostBurns\r\n if (xrefs && (xrefs.length > 0)) {\r\n ack.BurnRequestStatusXrefs = ack.BurnRequestStatusXrefs.concat(xrefs)\r\n }\r\n if (postBurns && (postBurns.length > 0)) {\r\n ack.PostBurns = ack.PostBurns.concat(postBurns)\r\n }\r\n delete r['BurnRequestStatusXrefs']\r\n delete r['PostBurns']\r\n delete r['BurnPermit']\r\n ack.BurnRequests.push(r)\r\n })\r\n \r\n yield call(upsertPostBurns, ack.PostBurns, null, id)\r\n yield put({\r\n type : OrmTypes.UPSERT_RANGE,\r\n modelName : 'BurnRequest',\r\n records : ack.BurnRequests,\r\n })\r\n yield put({\r\n type : OrmTypes.UPSERT_RANGE,\r\n modelName : 'BurnRequestStatusXref',\r\n records : ack.BurnRequestStatusXrefs,\r\n })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put(HIDE_LOADING)\r\n yield put(POST_BURN_LOADING_COMPLETE)\r\n }\r\n}\r\n\r\nfunction* destroyLocalPostBurns (burnRequestId, burnPermitId = null) {\r\n const filter = { IsLocal: true, }\r\n if (burnPermitId) {\r\n filter['BurnPermitId'] = burnPermitId\r\n } \r\n if (burnRequestId) {\r\n filter['BurnRequestId'] = burnRequestId\r\n }\r\n yield call(destroyLocalModels, POST_BURN_MODEL_NAME, filter)\r\n}\r\n\r\nexport function* downloadPostBurns () {\r\n try {\r\n const resp = yield call(doFetch, POST_BURN_ENDPOINT)\r\n if (!resp.ok) {\r\n yield call(showError, resp.responseBody || 'An error occurred retrieving Post Burns')\r\n }\r\n\r\n yield call(replaceAll, POST_BURN_MODEL_NAME, resp.responseBody)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nexport function* getBurnPermitInfoForPostBurn (burnPermitId) {\r\n try {\r\n if (!burnPermitId) {\r\n yield call(showError, 'You must supply a valid Burn Permit ID.')\r\n return\r\n }\r\n\r\n const alreadyHavePermitData = yield select(havePermitDataForPostBurn, burnPermitId)\r\n if (alreadyHavePermitData) {\r\n return\r\n }\r\n\r\n // Get the associated burn permit\r\n const burnPermit = yield select(permitIdAndSectionIdsByPermitIdSelector, burnPermitId)\r\n if (!burnPermit) {\r\n yield call(showError, `Could not find Burn Permit data for ${burnPermitId}`)\r\n return\r\n }\r\n \r\n yield all([\r\n call(getBurnPileGroups, { burnPermitId, }),\r\n call(getBurnPermitFuelsInfo, { burnPermitFuelId: burnPermit.BurnPermitFuelId, }),\r\n ])\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\n\r\nfunction* getPostBurnByIdSuccess (resp) {\r\n let postBurn = null\r\n try {\r\n if (!apiResponseIsAuthorized(resp)) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'You are not authorized to access this Post Burn Report.', })\r\n return\r\n }\r\n const { payload, } = resp\r\n if (payload.status === 404) {\r\n yield call(showError, 'Unable to locate Post Burn report.')\r\n } else if (payload.status === 200) {\r\n postBurn = yield call(extractPayload, resp)\r\n postBurn.IsLocal = false\r\n const { BurnPermitId, BurnRequestId, } = postBurn\r\n yield call(destroyLocalPostBurns, BurnRequestId, BurnPermitId)\r\n yield call(upsertPostBurns, postBurn, BurnRequestId, BurnPermitId)\r\n }\r\n } catch (e) {\r\n console.error('An error occurred retrieving Post Burn')\r\n yield call(showError, 'An error occurred retrieving Post Burn.')\r\n }\r\n}\r\n\r\n\r\nfunction* getBurnRequestInfoWrapper (burnRequestId = -1) {\r\n if (burnRequestId > 0) {\r\n const getBurnRequestAction = BurnRequestDetailActions.getBurnRequestInfo(burnRequestId)\r\n getBurnRequestAction.meta.offline.commit = { type: 'GET_BURN_REQUEST_SUCCESS', redirect: false, }\r\n yield put(getBurnRequestAction)\r\n }\r\n}\r\n\r\n/***************************************************************************************/\r\nfunction* initializePostBurnForm ({ burnPermitId = -1, burnRequestId = -1, postBurnId = -1, }) {\r\n // this runs after the reducer, selector should return the new values\r\n\r\n const activeIds = yield select(activePostBurnIds)\r\n const BurnPermitId = activeIds.BurnPermitId || burnPermitId, \r\n BurnRequestId = activeIds.BurnRequestId || burnRequestId, \r\n PostBurnId = activeIds.PostBurnId || postBurnId\r\n const { online, } = yield select(networkStateSelector)\r\n\r\n // post burn will have request and/or permit ids\r\n if (PostBurnId > 0) {\r\n const postBurn = yield select(postBurnByIdSelector, PostBurnId)\r\n if (postBurn) {\r\n if (postBurn.BurnRequestId > 0) {\r\n yield put(PostBurnActions.setPostBurnRequestId(postBurn.BurnRequestId))\r\n // get all the request info\r\n yield call(getBurnRequestInfoWrapper, postBurn.BurnRequestId)\r\n }\r\n if (postBurn.BurnPermitId > 0) {\r\n yield put(PostBurnActions.setPostBurnPermitId(postBurn.BurnPermitId))\r\n // if we don't know the burn request id, get the permit info\r\n if (online && postBurn.BurnRequestId <= 0){\r\n yield call(getBurnPermitInfo, { burnPermitId: BurnPermitId, })\r\n yield call(getBurnRequestsForPermit, { id: BurnPermitId, })\r\n }\r\n }\r\n }\r\n yield put(PostBurnActions.getPostBurnById(PostBurnId))\r\n } \r\n // burn request will have permit id\r\n else if (BurnRequestId > 0) { \r\n const request = yield select(burnRequestModelByIdSelector, BurnRequestId)\r\n if (request) {\r\n if (request.BurnPermitId > 0) {\r\n yield put(PostBurnActions.setPostBurnPermitId(request.BurnPermitId))\r\n }\r\n if (request.PostBurns.all().exists()){\r\n const pb = request.PostBurns.first()\r\n yield put(PostBurnActions.setPostBurnId(pb.PostBurnId))\r\n }\r\n }\r\n yield call(setOrCreateActivePostBurn)\r\n yield call(getBurnRequestInfoWrapper, BurnRequestId)\r\n } \r\n // permit by itself will need more information\r\n else if (BurnPermitId > 0 && online) {\r\n yield call(getBurnPermitInfo, { burnPermitId: BurnPermitId, })\r\n yield call(getBurnRequestsForPermit, { id: BurnPermitId, })\r\n }\r\n}\r\n/**************************************************************************************/\r\n\r\nfunction* createNoRequestPostBurn ({ useRequest, }) {\r\n if (useRequest === false) {\r\n yield call(setOrCreateActivePostBurn)\r\n }\r\n}\r\n\r\nexport const PostBurnSagas = [\r\n takeLatest(PostBurnTypes.POST_BURN_USE_REQUEST, createNoRequestPostBurn),\r\n takeLatest(PostBurnTypes.INITIALIZE_POST_BURN_FORM, initializePostBurnForm),\r\n takeLatest(PostBurnTypes.CANCEL_POST_BURN_SUBMIT, cancelPostBurnSubmit),\r\n takeLatest(PostBurnTypes.GET_POST_BURNS_BY_PERMIT, getPostBurnsByPermit),\r\n takeLatest(PostBurnTypes.SET_POST_BURN_PERMIT_BY_NUMBER, setPostBurnPermitByNumber),\r\n takeEvery(PostBurnTypes.CREATE_POST_BURN, createPostBurn),\r\n takeEvery(PostBurnTypes.POST_BURN_REQUEST_SUCCESS, postBurnRequestSuccess),\r\n takeEvery(PostBurnTypes.POST_BURN_REQUEST_FAIL, postBurnRequestFail),\r\n takeEvery(PostBurnTypes.UPDATE_POST_BURN, updatePostBurn),\r\n takeLatest(PostBurnTypes.GET_PB_PROMPTS_FOR_USER, getPostBurnStatusesForUser),\r\n takeLatest(PostBurnTypes.GET_POST_BURNS_BY_REQUEST_ID_SUCCESS, getPostBurnsByRequestIdSuccess),\r\n takeLatest(PostBurnTypes.GET_POST_BURN_BY_ID_SUCCESS, getPostBurnByIdSuccess),\r\n]","import { createActions, } from 'reduxsauce'\n \n/* ------------- Types and Action Creators ------------- */\nconst { Types, Creators, } = createActions({\n getForestHealthData : [ 'forestHealthId', ],\n createForestHealthData : [ 'burnPermitId', 'forestHealthData', ],\n updateForestHealthData : [ 'burnPermitId', 'exemptId', 'forestHealthData', ],\n})\n \nexport const ForestHealthTypes = Types\nexport default Creators","// Libraries\nimport { put, call, select, takeEvery, } from 'redux-saga/effects'\n\n// Reducers \nimport { ApiTypes, } from '../redux/ApiRedux'\nimport { ForestHealthTypes, } from '../redux/ForestHealthRedux'\n\n// Sagas\nimport { showError, doFetch, } from './ApiSagas'\nimport { replaceAll, upsertLocalModel, } from './OrmSagas'\nimport { getBurnPermit, } from './BurnPermitSagas'\n\n// Models\nimport BurnPermit from '../models/BurnPermit'\nimport ForestHealthExempt from '../models/ForestHealthExempt'\nimport ForestHealthExemptProblemTypeXref from '../models/ForestHealthExemptProblemTypeXref'\n\n// Selectors\nimport { networkStateSelector, } from '../selectors/selectors'\nimport { modelByIdSelector, } from '../selectors/modelSelectors'\n\n// Constants\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\nconst FOREST_HEALTH_EXEMPT_MODEL_NAME = ForestHealthExempt.modelName\nconst PROBLEM_TYPE_XREF_MODEL_NAME = ForestHealthExemptProblemTypeXref.modelName\n\n\n/**\n * Get the Forest Health Data for the provided Forest Health ID.\n * Will also request the lookup data to map the statuses to for the controls\n * @param {number} forestHealthId\n */\nexport function* getForestHealthData ({ forestHealthId, }) {\n try {\n\n if (!forestHealthId) {\n yield call(showError, 'You must provide a Forest Health ID in order to retrieve the application Forest Health Data.')\n return\n }\n\n const permitForestHealthUrl = `${ForestHealthExempt.endpoint()}/${forestHealthId}`\n \n const permitForestHealthResp = yield call(doFetch, permitForestHealthUrl)\n // If it's not an Ok, 200, or 404 response, throw an Error\n if (permitForestHealthResp.ok === false) {\n yield call(showError, `An error occurred fetching the Forest Health application data ID: ${forestHealthId}.`)\n return\n }\n\n const forestHealthExempt = permitForestHealthResp.responseBody\n yield call(upsertForestHealthData, forestHealthExempt)\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n/**\n * Creates the Forest Health data for a Burn Permit Application\n * specified by the `burnPermitId`\n * @param {number} burnPermitId\n * @param {object} forestHealthData\n */\nfunction* createForestHealthData ({ burnPermitId, forestHealthData, }) {\n const { online, } = yield select(networkStateSelector)\n \n const requestData = { ...forestHealthData, }\n const { ForestHealthExemptId, } = requestData\n \n const localForestHealthExempt = yield select(modelByIdSelector, { modelName: FOREST_HEALTH_EXEMPT_MODEL_NAME, modelId: ForestHealthExemptId, })\n \n if (!localForestHealthExempt || !localForestHealthExempt.IsLocal) {\n const url = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/ForestHealthExempt`\n if (!online) {\n yield put({\n type : ApiTypes.CANCEL_SUBMIT,\n action_type : ForestHealthTypes.UPDATE_BURN_PERMIT_SITE_REQUEST,\n url : url,\n method : 'POST',\n keyName : ForestHealthExempt.options.idAttribute,\n keyValue : ForestHealthExemptId,\n })\n }\n\n requestData.ForestHealthExemptProblemTypeXref = [ { ForestHealthProblemTypeId: requestData.ProblemTypeId, }, ]\n // Ensure we set correct default values for this scenario\n requestData.ForestHealthExemptId = 0\n requestData.AlternativeNotAppropriateReason = ''\n const resp = yield call(doFetch, url, { method: 'POST', body: requestData, })\n if (!resp.ok) {\n const error = resp.responseBody.error || 'An error occurred creating the Forest Health Exempt record'\n yield call(showError, error)\n }\n\n const newForestHealthExempt = resp.responseBody\n\n yield call(upsertForestHealthData, newForestHealthExempt)\n\n yield put({ type: 'SHOW_SUCCESS', })\n // Get the burn permit info again to get the forest health id set\n yield call(getBurnPermit, { burnPermitId, })\n }\n \n if (!online) {\n yield call(upsertForestHealthData, localForestHealthExempt, true)\n }\n}\n\n/**\n * Updates the Forest Health data for a Burn Permit Application\n * specified by the `burnPermitId`\n * @param {number} burnPermitId\n * @param {object} forestHealthData\n */\nfunction* updateForestHealthData ({ burnPermitId, exemptId, forestHealthData, }) {\n const { online, } = yield select(networkStateSelector)\n \n const requestData = { ...forestHealthData, }\n \n const localForestHealthExempt = yield select(modelByIdSelector, { modelName: FOREST_HEALTH_EXEMPT_MODEL_NAME, modelId: exemptId, })\n \n if (!localForestHealthExempt || !localForestHealthExempt.IsLocal) {\n const url = `${BURN_PERMIT_ENDPOINT}/${burnPermitId}/ForestHealthExempt/${exemptId}`\n if (!online) {\n yield put({\n type : ApiTypes.CANCEL_SUBMIT,\n action_type : ForestHealthTypes.UPDATE_BURN_PERMIT_SITE_REQUEST,\n url : url,\n method : 'PUT',\n keyName : ForestHealthExempt.options.idAttribute,\n keyValue : exemptId,\n })\n }\n\n requestData.ForestHealthExemptProblemTypeXref = [ { ForestHealthProblemTypeId: requestData.ProblemTypeId, }, ]\n\n const resp = yield call(doFetch, url, { method: 'PUT', body: requestData, })\n if (!resp.ok) {\n const error = resp.responseBody.error || 'An error occurred creating the Forest Health Exempt record'\n yield call(showError, error)\n }\n\n const forestHealthExempt = resp.responseBody\n\n yield call(upsertForestHealthData, forestHealthExempt)\n\n yield put({ type: 'SHOW_SUCCESS', })\n }\n \n if (!online) {\n yield call(upsertForestHealthData, localForestHealthExempt, true)\n }\n}\n\n/**\n * Handles the data transformation and upserting of the Forest Health Exempt\n * and Forest Health Exempt Problem Type Xrefs\n * @param {object} forestHealthExempt \n * @param {bool} IsLocal - sets a property marking the model as only existing locally and not on the server\n */\nfunction* upsertForestHealthData (forestHealthExempt, IsLocal = false) {\n\n const { ForestHealthExemptProblemTypeXref, } = forestHealthExempt\n\n let typeXrefs = []\n // Migrated permits do not have problem types, so add a guard\n // to prevent spreading a non-iterable instance\n if (ForestHealthExemptProblemTypeXref) {\n typeXrefs = [ ...ForestHealthExemptProblemTypeXref, ]\n }\n delete forestHealthExempt.ForestHealthExemptProblemTypeXref\n\n forestHealthExempt.IsLocal = IsLocal\n yield call(upsertLocalModel, FOREST_HEALTH_EXEMPT_MODEL_NAME, forestHealthExempt)\n \n yield call(replaceAll, PROBLEM_TYPE_XREF_MODEL_NAME, typeXrefs, { ForestHealthExemptId: forestHealthExempt.ForestHealthExemptId, })\n}\n\n\nexport const ForestHealthSagas = [\n takeEvery(ForestHealthTypes.GET_FOREST_HEALTH_DATA, getForestHealthData),\n takeEvery(ForestHealthTypes.CREATE_FOREST_HEALTH_DATA, createForestHealthData),\n takeEvery(ForestHealthTypes.UPDATE_FOREST_HEALTH_DATA, updateForestHealthData),\n]","// Libraries\r\nimport { put, all, call, select, fork, takeLatest, delay, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { getLookupData, doFetch, showError, extractPayload, apiResponseIsAuthorized, } from './ApiSagas'\r\nimport { showLoading, hideLoading, } from './AppSagas'\r\nimport { getBurnAreaInfo, } from './BurnPermitAreaSagas'\r\nimport { getBurnLocationInfo, } from './BurnPermitLocationSagas'\r\nimport { downloadBurnPermits, getBurnPermit, getBurnPermitStatusHistory, } from './BurnPermitSagas'\r\nimport { getBurnPermitSignatures, } from './BurnPermitSignatureSagas'\r\nimport { getBurnPermitSiteInfo, } from './BurnPermitSiteSagas'\r\nimport { getPerson, } from './PersonSagas'\r\nimport { downloadPostBurns, getPostBurnsByPermit, } from './PostBurnSagas'\r\nimport { upsertLocalModel, replaceAll, destroyLocalModel, createLocalModel, updateLocalModel, } from './OrmSagas'\r\nimport { getForestHealthData, } from './ForestHealthSagas'\r\n\r\n// Reducers\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport { BurnRequestDetailTypes, } from '../redux/BurnRequestDetailRedux'\r\nimport { BurnRequestSearchTypes, } from '../redux/BurnRequestSearchRedux'\r\nimport BurnRequestListActions, { BurnRequestListTypes, } from '../redux/BurnRequestListRedux'\r\nimport { UiTypes, } from '../redux/UiRedux'\r\n\r\n// Models\r\nimport BurnRequest from '../models/BurnRequest'\r\nimport BurnRequestSearch from '../models/BurnRequestSearch'\r\nimport BurnRequestStatusXref from '../models/BurnRequestStatusXref'\r\n\r\n// Selectors\r\nimport { permitByBurnPermitNumberSelector, permitByIdSelector, networkStateSelector, } from '../selectors/selectors'\r\nimport { permitSummaryDataComplete, permitSearchByIdSelector, } from '../selectors/burnPermitSelectors'\r\nimport { getBurnRequestStatusIdByName, } from '../selectors/burnRequestSelectors'\r\nimport { modelByIdSelector, } from '../selectors/modelSelectors'\r\nimport { userNameSelector, } from '../selectors/userSelectors'\r\nimport { lastRouteSelector, } from '../selectors/appSelectors'\r\n\r\n// Utilities\r\nimport { objHasProp, } from '../utilities'\r\nimport { getUnsubmittedRequests, } from '../selectors/personSelectors'\r\nimport { PersonTypes, } from '../redux/PersonRedux'\r\n\r\n\r\nconst BURN_REQUEST_MODEL_NAME = BurnRequest.modelName\r\nconst BURN_REQUEST_ENDPOINT = BurnRequest.endpoint()\r\nconst BURN_REQUEST_DOWNLOAD_ENDPOINT = `${BURN_REQUEST_ENDPOINT}/Download/`\r\nconst BURN_REQUEST_SEARCH_MODEL = BurnRequestSearch.modelName\r\n\r\n\r\nexport function* getBurnPermitInfo ({ burnPermitNumber, burnPermitId, }) {\r\n try {\r\n if (!burnPermitNumber && !burnPermitId) {\r\n yield call(showError, 'You must supply a valid Burn Permit Number or Burn Permit ID.')\r\n return\r\n }\r\n\r\n if (!burnPermitId && burnPermitNumber) {\r\n const localBurnPermit = yield select(permitByBurnPermitNumberSelector, burnPermitNumber)\r\n if (localBurnPermit) {\r\n burnPermitId = localBurnPermit.BurnPermitId\r\n }\r\n }\r\n \r\n const alreadyHavePermitData = yield select(permitSummaryDataComplete, burnPermitId)\r\n if (alreadyHavePermitData) {\r\n return\r\n }\r\n \r\n // Get the associated burn permit\r\n yield call(getBurnPermit, { burnPermitId, burnPermitNumber, })\r\n\r\n // Get the associated burn permit\r\n let burnPermit\r\n\r\n if (burnPermitNumber) {\r\n burnPermit = yield select(permitByBurnPermitNumberSelector, burnPermitNumber)\r\n }\r\n else if (burnPermitId) {\r\n burnPermit = yield select(permitByIdSelector, burnPermitId)\r\n }\r\n\r\n if (!burnPermit) {\r\n yield call(showError, 'Could not find a Burn Permit.')\r\n return\r\n }\r\n\r\n // Get the IDs of the related objects we need some of the info for\r\n const {\r\n BurnerId,\r\n AgentId,\r\n BurnPermitAreaId,\r\n BurnPermitSiteId,\r\n BurnPermitLocationId,\r\n ForestHealthExemptId,\r\n } = burnPermit\r\n\r\n const sagas = [\r\n call(getBurnPermitStatusHistory, { burnPermitId: burnPermit.BurnPermitId, }),\r\n call(getBurnAreaInfo, { burnPermitAreaId: BurnPermitAreaId, }),\r\n call(getBurnPermitSiteInfo, { burnPermitSiteId: BurnPermitSiteId, }),\r\n call(getBurnPermitSignatures, { burnPermitId: burnPermit.BurnPermitId, }),\r\n call(getBurnLocationInfo, { burnPermitLocationId: BurnPermitLocationId, }),\r\n ]\r\n\r\n if (Number.isInteger(ForestHealthExemptId)){\r\n sagas.push(call(getForestHealthData, { forestHealthId: ForestHealthExemptId, }))\r\n }\r\n\r\n if (Number.isInteger(BurnerId)) {\r\n sagas.push(call(getPerson, { personId: BurnerId, getLookupData: false, }))\r\n }\r\n\r\n if (Number.isInteger(AgentId)) {\r\n // getPerson gets the agent xrefs, unlike get agent for some reason\r\n sagas.push(call(getPerson, { personId: AgentId, getLookupData: false, }))\r\n }\r\n\r\n // Call the API to get that info\r\n yield all(sagas)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* getBurnRequestSuccess (resp) {\r\n try {\r\n if (!apiResponseIsAuthorized(resp)) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'You are not authorized to access this Burn Request.', })\r\n return\r\n }\r\n const burnRequest = yield call(extractPayload, resp)\r\n let BurnRequestId, BurnPermitId\r\n if (!objHasProp(burnRequest, 'success')) {\r\n BurnRequestId = burnRequest.BurnRequestId\r\n BurnPermitId = burnRequest.BurnPermitId\r\n burnRequest.IsLocal = false\r\n yield call(upsertLocalModel, BURN_REQUEST_MODEL_NAME, burnRequest)\r\n\r\n if (resp.localId) {\r\n yield call(destroyLocalModel, BURN_REQUEST_MODEL_NAME, resp.localId)\r\n }\r\n } else if (objHasProp(resp, 'submittedRequest')) {\r\n BurnRequestId = resp.submittedRequest\r\n }\r\n\r\n if (BurnRequestId){\r\n yield fork(getBurnRequestStatusHistory, { burnRequestId: BurnRequestId, })\r\n }\r\n\r\n // If we don't have all the associated burn permit data, get it\r\n if (BurnPermitId){\r\n yield call(getBurnPermitInfo, { burnPermitId: BurnPermitId, })\r\n yield call(getPostBurnsByPermit, { permitId: BurnPermitId, })\r\n }\r\n\r\n if (BurnRequestId) {\r\n if (resp.redirect) {\r\n yield call(goToRequestId, BurnRequestId)\r\n }\r\n }\r\n if (resp.showSuccess) {\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield fork(hideBurnReqLoading)\r\n }\r\n}\r\n\r\nfunction* getBurnRequestLookupData () {\r\n yield all([\r\n call(getLookupData, { modelName: 'BurnRequestStatus', }),\r\n call(getLookupData, { modelName: 'BurnRequestCancellationReason', }),\r\n ])\r\n yield put({ type: ApiTypes.DONE_PREPARING_OFFLINE, })\r\n}\r\n\r\nexport function* getBurnRequestStatusHistory ({ burnRequestId, } = {}) {\r\n try {\r\n yield fork(getBurnRequestLookupData)\r\n const resp = yield call(doFetch, BurnRequestStatusXref.endpoint(burnRequestId, true))\r\n\r\n if (!resp.ok) {\r\n yield call(showError, resp.responseBody || 'An error occurred attempting to fetch Burn Request Status History.')\r\n return\r\n }\r\n\r\n const requestStatuses = resp.responseBody\r\n \r\n if (Array.isArray(requestStatuses)) {\r\n let filter\r\n if (burnRequestId) {\r\n filter = { BurnRequestId: burnRequestId, }\r\n }\r\n yield call(replaceAll, BurnRequestStatusXref.modelName, requestStatuses, filter)\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* createRequest ({ burnRequestInfo, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n yield fork(showLoading)\r\n\r\n let localId\r\n if (!online) {\r\n const model = { ...burnRequestInfo, }\r\n model.DaysOfWeek = burnRequestInfo.BurnRequestBurnDaysXref.map(x => x.DayOfWeekId)\r\n const { BurnRequestId, } = yield call(createLocalModel, BURN_REQUEST_MODEL_NAME, model)\r\n localId = BurnRequestId\r\n yield fork(upsertSearchRequestModel, localId, model)\r\n yield call(goToRequestId, localId)\r\n yield put({ type: BurnRequestListTypes.GET_MY_BURN_REQUESTS, })\r\n }\r\n\r\n yield put({\r\n type : 'OFFLINE/CREATE_BURN_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : BURN_REQUEST_ENDPOINT,\r\n init : {\r\n method : 'POST',\r\n body : burnRequestInfo,\r\n },\r\n },\r\n commit : { type: 'GET_BURN_REQUEST_SUCCESS', showSuccess: online, redirect: true, localId, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield fork(hideLoading)\r\n }\r\n}\r\nfunction* quickSubmitFailure ({ id, }) {\r\n const requests = yield select(getUnsubmittedRequests)\r\n const submittedRequest = requests.find(r => r.BurnRequestId == id)\r\n submittedRequest.Submitting = false\r\n submittedRequest.Submitted = false\r\n submittedRequest.Failed = true\r\n yield put({ type: PersonTypes.SET_UNSUBMITTED_REQUESTS, requests: [ ...requests, ], })\r\n}\r\n\r\nfunction* quickSubmitSuccess ({ showSuccess, id, }) {\r\n const requests = yield select(getUnsubmittedRequests)\r\n const submittedRequest = requests.find(r => r.BurnRequestId == id)\r\n submittedRequest.Submitting = false\r\n submittedRequest.Submitted = true\r\n submittedRequest.Failed = false\r\n yield put({ type: PersonTypes.SET_UNSUBMITTED_REQUESTS, requests: [ ...requests, ], })\r\n if (showSuccess) {\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n }\r\n}\r\n\r\nfunction* quickSubmitRequest ({ id, }) {\r\n try {\r\n const { online, } = yield select(networkStateSelector)\r\n \r\n const requests = yield select(getUnsubmittedRequests)\r\n const newRequests = [ ...requests, ]\r\n const submittingRequest = newRequests.find(r => r.BurnRequestId == id)\r\n submittingRequest.Submitting = true\r\n submittingRequest.Submitted = false\r\n submittingRequest.Failed = false\r\n yield put({ type: PersonTypes.SET_UNSUBMITTED_REQUESTS, requests: newRequests, })\r\n\r\n\r\n let burnRequestUrl = `${BURN_REQUEST_ENDPOINT}/${id}/QuickSubmit`\r\n yield fork(showLoading)\r\n yield put({\r\n type : 'OFFLINE/UPDATE_BURN_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : burnRequestUrl,\r\n init : {\r\n method: 'POST',\r\n },\r\n },\r\n commit : { type: BurnRequestDetailTypes.QUICK_SUBMIT_REQUEST_SUCCESS, showSuccess: online, id, },\r\n rollback : { type: BurnRequestDetailTypes.QUICK_SUBMIT_REQUEST_FAILURE, id, },\r\n },\r\n },\r\n })\r\n\r\n } \r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield fork(hideLoading)\r\n }\r\n}\r\n\r\nfunction* saveRequest ({ burnRequestInfo, submit = false, }) {\r\n try {\r\n let burnRequestUrl = `${BURN_REQUEST_ENDPOINT}/${burnRequestInfo.BurnRequestId}`\r\n if (submit) {\r\n burnRequestUrl += '?submit=true'\r\n }\r\n\r\n const { online, } = yield select(networkStateSelector)\r\n yield fork(showLoading)\r\n\r\n const { BurnRequestId, } = burnRequestInfo\r\n const localBurnReq = yield select(modelByIdSelector, { modelName: BURN_REQUEST_MODEL_NAME, modelId: BurnRequestId, })\r\n if (!localBurnReq.IsLocal) {\r\n if (!online) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : 'OFFLINE/UPDATE_BURN_REQUEST',\r\n url : burnRequestUrl,\r\n method : 'PUT',\r\n keyName : BurnRequest.options.idAttribute,\r\n keyValue : BurnRequestId,\r\n })\r\n }\r\n }\r\n yield put({\r\n type : 'OFFLINE/UPDATE_BURN_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : burnRequestUrl,\r\n init : {\r\n method : 'PUT',\r\n body : burnRequestInfo,\r\n },\r\n },\r\n commit : { type: 'GET_BURN_REQUEST_SUCCESS', showSuccess: online, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n })\r\n\r\n if (!online) {\r\n const model = { ...burnRequestInfo, }\r\n model.BurnDays = burnRequestInfo.BurnRequestBurnDaysXref.map(x => x.DayOfWeekId)\r\n yield call(updateLocalModel, BURN_REQUEST_MODEL_NAME, model)\r\n yield fork(upsertSearchRequestModel, model.BurnRequestId, model)\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n yield put({ type: BurnRequestListTypes.GET_MY_BURN_REQUESTS, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield fork(hideLoading)\r\n }\r\n}\r\n\r\nfunction* agencySubmitRequest ({ burnRequestInfo, }) {\r\n try {\r\n yield call(showLoading)\r\n const { online, } = yield select(networkStateSelector)\r\n const { BurnRequestId, } = burnRequestInfo\r\n const agencySubmitUrl = `${BURN_REQUEST_ENDPOINT}/${BurnRequestId}/Submit`\r\n\r\n const localBurnReq = yield select(modelByIdSelector, { modelName: BURN_REQUEST_MODEL_NAME, modelId: BurnRequestId, })\r\n if (localBurnReq && !localBurnReq.IsLocal) {\r\n if (!online) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : 'OFFLINE/AGENCY_SUBMIT_BURN_REQUEST',\r\n url : agencySubmitUrl,\r\n method : 'POST',\r\n })\r\n }\r\n }\r\n \r\n yield put({\r\n type : 'OFFLINE/AGENCY_SUBMIT_BURN_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : agencySubmitUrl,\r\n init : { method: 'POST', },\r\n },\r\n commit : { type: 'GET_BURN_REQUEST_SUCCESS', showSuccess: online, submittedRequest: BurnRequestId, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n })\r\n\r\n if (!online) {\r\n yield fork(saveRequest, burnRequestInfo)\r\n yield fork(submitLocalRequest, BurnRequestId)\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n yield put({ type: BurnRequestListTypes.GET_MY_BURN_REQUESTS, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* submitRequest ({ burnRequestInfo, }) {\r\n yield call(saveRequest, { burnRequestInfo, submit: true, })\r\n const { online, } = yield select(networkStateSelector)\r\n if (!online) {\r\n yield fork(submitLocalRequest, burnRequestInfo.BurnRequestId)\r\n yield put({ type: BurnRequestListTypes.GET_MY_BURN_REQUESTS, })\r\n }\r\n}\r\n\r\nfunction* submitLocalRequest (BurnRequestId) {\r\n yield fork(createLocalStatus, BurnRequestId, 'Submitted', '[SYSTEM] Your Burn Request Submission will be submitted once you regain an internet connection.')\r\n}\r\n\r\nfunction* createLocalStatus (BurnRequestId, StatusName, Comment) {\r\n const BurnRequestStatusId = yield select(getBurnRequestStatusIdByName, StatusName)\r\n const username = yield select(userNameSelector)\r\n const dateAsJson = new Date().toJSON()\r\n yield call(createLocalModel, BurnRequestStatusXref.modelName, {\r\n BurnRequestId,\r\n Comment,\r\n BurnRequestStatusId,\r\n StatusDate : dateAsJson,\r\n CreateBy : username,\r\n CreateDate : dateAsJson,\r\n })\r\n}\r\n\r\nfunction* submitRequestStatus ({ burnRequestStatus, }) {\r\n try {\r\n\r\n yield call(showLoading)\r\n\r\n const { BurnRequestId, } = burnRequestStatus\r\n\r\n const burnRequestUrl = `${BURN_REQUEST_ENDPOINT}/${BurnRequestId}/RequestStatus`\r\n\r\n const requestObj = {\r\n method : 'POST',\r\n body : burnRequestStatus,\r\n }\r\n\r\n const burnRequestResp = yield call(doFetch, burnRequestUrl, requestObj)\r\n\r\n if (burnRequestResp.ok !== true) {\r\n yield call(showError, burnRequestResp.responseBody.error || 'An error occurred recording the Burn Request Status.')\r\n return\r\n }\r\n\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n yield fork(getBurnRequestStatusHistory, { burnRequestId: BurnRequestId, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* deleteRequestStatus ({ burnRequestId, burnRequestStatusXrefId, }) {\r\n try {\r\n if (isNaN(parseInt(burnRequestId))) {\r\n yield call(showError, 'You must supply a Burn Request ID to delete a Request Status.')\r\n return\r\n }\r\n if (isNaN(parseInt(burnRequestStatusXrefId))) {\r\n yield call(showError, 'You must supply a Burn Request Status ID to delete a Request Status.')\r\n return\r\n }\r\n\r\n const putAppStatusUrl = `${BurnRequestStatusXref.deleteEndpoint(burnRequestId, burnRequestStatusXrefId)}`\r\n\r\n const applicationStatusResponse = yield call(doFetch, putAppStatusUrl, { method: 'DELETE', })\r\n\r\n if (applicationStatusResponse.ok !== true) {\r\n yield call(showError, 'An error occurred while attempting to delete the Burn Request Status.')\r\n return\r\n }\r\n\r\n yield call(destroyLocalModel, BurnRequestStatusXref.modelName, burnRequestStatusXrefId)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* cancelBurnRequest ({ burnRequestInfo, }) {\r\n try {\r\n\r\n yield call(showLoading)\r\n\r\n const { BurnRequestId, } = burnRequestInfo\r\n\r\n const burnRequestUrl = `${BURN_REQUEST_ENDPOINT}/${BurnRequestId}/Cancel`\r\n \r\n yield call(showLoading)\r\n const { online, } = yield select(networkStateSelector)\r\n\r\n const localBurnReq = yield select(modelByIdSelector, { modelName: BURN_REQUEST_MODEL_NAME, modelId: BurnRequestId, })\r\n if (localBurnReq && !localBurnReq.IsLocal) {\r\n if (!online) {\r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : 'OFFLINE/CANCEL_BURN_REQUEST',\r\n url : burnRequestUrl,\r\n method : 'PUT',\r\n keyName : BurnRequest.options.idAttribute,\r\n keyValue : BurnRequestId,\r\n })\r\n }\r\n }\r\n \r\n yield put({\r\n type : 'OFFLINE/CANCEL_BURN_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : burnRequestUrl,\r\n init : { method: 'PUT', body: burnRequestInfo, },\r\n },\r\n commit : { type: 'CANCEL_BURN_REQUEST_SUCCESS', requestId: BurnRequestId, showSuccess: online, },\r\n rollback : { type: 'API_FAIL', },\r\n },\r\n },\r\n })\r\n\r\n if (!online) {\r\n yield fork(createLocalStatus, BurnRequestId, 'Cancelled', '[SYSTEM] Your Burn Request Cancellation will be submitted once you regain an internet connection.')\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n yield put({ type: BurnRequestListTypes.GET_MY_BURN_REQUESTS, })\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put({ type: UiTypes.CLOSE_MODAL, })\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* cancelBurnRequestSuccess (resp) {\r\n const success = yield call(extractPayload, resp)\r\n if (!success) {\r\n yield call(showError, 'An error occurred Cancelling a Burn Request')\r\n return\r\n }\r\n yield call(getBurnRequestStatusHistory, { burnRequestId: resp.requestId, })\r\n}\r\n\r\n/**\r\n * Delete a Burn Request object\r\n * @param {Object} id - The Burn Request ID\r\n */\r\nfunction* deleteBurnRequest ({ id, }) {\r\n try {\r\n if (!id) {\r\n yield call(showError, 'Must supply a Burn Request ID to delete')\r\n return\r\n }\r\n const localBurnReq = yield select(modelByIdSelector, { modelName: BURN_REQUEST_MODEL_NAME, modelId: id, })\r\n if (!localBurnReq.IsLocal) {\r\n const url = `${BURN_REQUEST_ENDPOINT}/${id}`\r\n yield put({\r\n type : 'OFFLINE/DELETE_BURN_REQUEST',\r\n meta : {\r\n offline: {\r\n effect: {\r\n url : url,\r\n init : { method: 'DELETE', },\r\n },\r\n },\r\n },\r\n })\r\n }\r\n \r\n yield put({\r\n type : ApiTypes.CANCEL_SUBMIT,\r\n action_type : 'OFFLINE/CREATE_BURN_REQUEST',\r\n url : BURN_REQUEST_ENDPOINT,\r\n method : 'POST',\r\n keyName : BurnRequest.options.idAttribute,\r\n keyValue : parseInt(id),\r\n })\r\n \r\n yield all([\r\n call(destroyLocalModel, BURN_REQUEST_MODEL_NAME, id),\r\n call(destroyLocalModel, BURN_REQUEST_SEARCH_MODEL, id),\r\n put({ type: AppTypes.SHOW_SUCCESS, }),\r\n ])\r\n const lastRoute = yield select(lastRouteSelector)\r\n yield put({ type: AppTypes.REDIRECT_TO, route: lastRoute || '/burn-requests', })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n // Whether successful or not, close the modal\r\n yield put({ type: UiTypes.CLOSE_MODAL, })\r\n }\r\n}\r\n\r\n\r\nfunction* searchBurnRequestsSuccess (resp) {\r\n const results = yield call(extractPayload, resp)\r\n if (Array.isArray(results)) {\r\n yield call(replaceAll, BurnRequestSearch.modelName, results)\r\n }\r\n yield call(hideLoading)\r\n}\r\n\r\n/**\r\n * Submits a bulk request for Burn Requests to enable offline access\r\n */\r\nfunction* downloadBurnRequests () {\r\n try {\r\n // Update the list container so users can access any new requests that they may be assigned before downloading\r\n yield put(BurnRequestListActions.getMyBurnRequests())\r\n yield put({ type: BurnRequestListTypes.RESET_REQUESTS_DOWNLOAD_STATUS, })\r\n yield fork(getBurnRequestLookupData)\r\n yield call(downloadBurnPermits)\r\n yield put({ type: BurnRequestListTypes.SET_REQUESTS_DOWNLOAD_STATUS, target: 'BurnPermits', status: true, })\r\n \r\n const downloadResp = yield call(doFetch, BURN_REQUEST_DOWNLOAD_ENDPOINT)\r\n \r\n if (downloadResp.ok !== true) {\r\n yield call(showError, downloadResp.responseBody.error || 'An error occurred download Burn Requests')\r\n return\r\n }\r\n \r\n yield call(replaceAll, BURN_REQUEST_MODEL_NAME, downloadResp.responseBody)\r\n yield call(getBurnRequestStatusHistory)\r\n yield put({ type: BurnRequestListTypes.SET_REQUESTS_DOWNLOAD_STATUS, target: 'BurnRequests', status: true, })\r\n\r\n // do this last (try) to prevent the ORM from destroying the relationships\r\n yield call(downloadPostBurns)\r\n yield put({ type: BurnRequestListTypes.SET_REQUESTS_DOWNLOAD_STATUS, target: 'PostBurns', status: true, })\r\n\r\n yield delay(500)\r\n yield all([\r\n put({ type: UiTypes.CLOSE_MODAL, }),\r\n put({ type: BurnRequestListTypes.DONE_DOWNLOADING_BURN_REQUESTS, }),\r\n ])\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n}\r\n\r\nfunction* showBurnReqLoading () {\r\n const { online, } = yield select(networkStateSelector)\r\n if (online) {\r\n yield call(showLoading)\r\n yield put({ type: BurnRequestDetailTypes.LOADING_BURN_REQUEST, })\r\n }\r\n}\r\n\r\nfunction* hideBurnReqLoading () {\r\n const { online, } = yield select(networkStateSelector)\r\n if (online) {\r\n yield call(hideLoading)\r\n yield put({ type: BurnRequestDetailTypes.DONE_LOADING, })\r\n }\r\n}\r\n\r\nfunction* goToRequestId (id) {\r\n yield put({\r\n type : AppTypes.REDIRECT_TO,\r\n route : `/burn-requests/${id}`,\r\n })\r\n}\r\n\r\nfunction* upsertSearchRequestModel (localId, model) {\r\n const { BurnPermitId, } = model\r\n const burnPermitSearch = yield select(permitSearchByIdSelector, BurnPermitId)\r\n const username = yield select(userNameSelector)\r\n yield fork(upsertLocalModel, BURN_REQUEST_SEARCH_MODEL, {\r\n BurnRequestId : localId,\r\n HasPostBurn : false,\r\n BurnPermitId : BurnPermitId,\r\n BurnRequestDate : model.BurnRequestDate,\r\n MultiDayBurn : model.MultiDayBurn,\r\n BurnPriority : model.BurnPriority,\r\n PlannedIgnitionDate : model.PlannedIgnitionDate,\r\n PlannedIgnitionPeriod : model.PlannedIgnitionPeriod,\r\n PlannedIgnitionTime : model.PlannedIgnitionTime,\r\n TotalProposedBurnQuantity : model.TotalProposedBurnQuantity,\r\n ProposedBurnArea : model.ProposedBurnArea,\r\n BurnRequestStatus : '',\r\n BurnPermitNumber : burnPermitSearch.BurnPermitNumber,\r\n Landowner : burnPermitSearch.Landowner,\r\n Agent : burnPermitSearch.Agent,\r\n BurnUnitName : burnPermitSearch.BurnUnitName,\r\n TotalPermitTonnage : burnPermitSearch.TotalPermitTonnage,\r\n BurnAcres : burnPermitSearch.BurnAcres,\r\n Latitude : burnPermitSearch.Latitude,\r\n Longitude : burnPermitSearch.Longitude,\r\n CreateDate : new Date().toJSON(),\r\n CreateBy : username,\r\n })\r\n}\r\n\r\n\r\nfunction* overrideDecision ({ burnRequestId, comment, }) {\r\n try {\r\n const overrideUrl = `${BURN_REQUEST_ENDPOINT}/${burnRequestId}/Override`\r\n\r\n const overrideResp = yield call(doFetch, overrideUrl, { method: 'PUT', body: { Comment: comment, }, })\r\n\r\n if (overrideResp.ok !== true) {\r\n let error = 'An error occurred while attempting to override the Burn Request Status.'\r\n if (overrideResp.responseBody && overrideResp.responseBody.error) {\r\n error = overrideResp.responseBody.error\r\n }\r\n yield call(showError, error)\r\n return\r\n }\r\n\r\n yield call(getBurnRequestStatusHistory, { burnRequestId, })\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield put({ type: UiTypes.CLOSE_MODAL, })\r\n }\r\n}\r\n\r\n\r\nexport const BurnRequestDetailSagas = [\r\n takeLatest(BurnRequestSearchTypes.SEARCH_BURN_REQUESTS_SUCCESS, searchBurnRequestsSuccess),\r\n takeLatest(BurnRequestDetailTypes.GET_BURN_REQUEST_INFO, showBurnReqLoading),\r\n takeLatest(BurnRequestDetailTypes.GET_BURN_REQUEST_SUCCESS, getBurnRequestSuccess),\r\n takeLatest(BurnRequestDetailTypes.GET_BURN_PERMIT_INFO, getBurnPermitInfo),\r\n takeLatest(BurnRequestDetailTypes.GET_BURN_REQUEST_STATUS_HISTORY, getBurnRequestStatusHistory),\r\n takeLatest(BurnRequestDetailTypes.CREATE_REQUEST, createRequest),\r\n takeLatest(BurnRequestDetailTypes.SAVE_REQUEST, saveRequest),\r\n takeLatest(BurnRequestDetailTypes.SUBMIT_REQUEST, submitRequest),\r\n takeLatest(BurnRequestDetailTypes.DELETE_BURN_REQUEST, deleteBurnRequest),\r\n takeLatest(BurnRequestDetailTypes.SUBMIT_REQUEST_STATUS, submitRequestStatus),\r\n takeLatest(BurnRequestDetailTypes.DELETE_REQUEST_STATUS, deleteRequestStatus),\r\n takeLatest(BurnRequestDetailTypes.CANCEL_BURN_REQUEST, cancelBurnRequest),\r\n takeLatest(BurnRequestDetailTypes.CANCEL_BURN_REQUEST_SUCCESS, cancelBurnRequestSuccess),\r\n takeLatest(BurnRequestDetailTypes.AGENCY_SUBMIT_REQUEST, agencySubmitRequest),\r\n takeLatest(BurnRequestDetailTypes.OVERRIDE_DECISION, overrideDecision),\r\n takeLatest(BurnRequestListTypes.DOWNLOAD_REQUESTS, downloadBurnRequests),\r\n takeLatest(ApiTypes.DOWNLOAD_LOOKUP_DATA, getBurnRequestLookupData),\r\n takeLatest(BurnRequestDetailTypes.QUICK_SUBMIT_REQUEST, quickSubmitRequest),\r\n takeLatest(BurnRequestDetailTypes.QUICK_SUBMIT_REQUEST_FAILURE, quickSubmitFailure),\r\n takeLatest(BurnRequestDetailTypes.QUICK_SUBMIT_REQUEST_SUCCESS, quickSubmitSuccess),\r\n]","// Libraries\nimport { put, call, takeEvery, } from 'redux-saga/effects'\n\n// Reducers\nimport { CalendarTypes, } from '../redux/CalendarRedux'\n\n// Sagas\nimport { extractPayload, } from './ApiSagas'\nimport { hideLoading, showLoading, } from './AppSagas'\n\n/**\n * Maps the Burn Request Search response array to calendar events then\n * calls a dispatch action to set the events on the calendar reducer\n * @param {Object} resp\n */\nexport function* calendarEventsSuccess (resp) {\n const burnReqs = yield call(extractPayload, resp)\n yield put({ type: CalendarTypes.SET_EVENTS, events: [ ...burnReqs, ], })\n yield call(hideLoading)\n}\n\nexport const CalendarSagas = [\n takeEvery(CalendarTypes.CALENDAR_EVENTS_SUCCESS, calendarEventsSuccess),\n takeEvery(CalendarTypes.SET_START_END, showLoading),\n]","import { put, call, takeEvery, takeLatest, all, } from 'redux-saga/effects'\n\n// Reducers\nimport { GeoCoordinateTypes, } from '../redux/GeoCoordinateRedux'\n\n// Utilities\nimport { objHasProp, } from '../utilities'\n\n// Sagas\nimport { showError, } from './ApiSagas'\n\n// Map Config\nimport {\n COUNTIES,\n COUNTIES_SERVICE_URL,\n FIRE_DISTRICTS,\n FIRE_DISTRICTS_SERVICE_URL,\n REGIONS,\n REGIONS_SERVICE_URL,\n TRS,\n TRS_SERVICE_URL,\n} from '../config/map/featureLayers'\n\n\nconst {\n REACT_APP_SHOW_LOGGING,\n REACT_APP_WAMAS_GIS_SERVICES,\n REACT_APP_REQUEST_PROXY_URL,\n// eslint-disable-next-line no-undef\n} = process.env\n\nexport function* geocode ({ address, city, state, zip, singleLine, }) {\n try {\n // call the address locator service to get address location candidates\n const result = yield call(addressLookup, { address, city, state, zip, singleLine, })\n\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.log('result: ', result)\n }\n\n // if there aren't any results or no candidates just exit early\n if (!result || result.candidates.length < 1) {\n return false\n }\n else if (result.error) {\n yield call(showError, result.error)\n return\n }\n\n // extract the address candidate object and the lat/long\n const addressCandidate = result.candidates[0]\n const {\n x: longitude,\n y: latitude,\n } = addressCandidate.location\n\n // query for the county, firedistrict, region, and trs \n // with the candidate lat/long\n const [ county, fireDistrict, region, trs, ] = yield all([\n call(getCountyByCoord, latitude, longitude),\n call(getFireDistrictByCoord, latitude, longitude),\n call(getRegionByCoord, latitude, longitude),\n call(getTRSByCoord, latitude, longitude),\n ])\n\n addressCandidate.layerId = 'ADDRESS'\n addressCandidate.source = 'ADDRESS'\n trs.source = 'ADDRESS'\n fireDistrict.source = 'ADDRESS'\n region.source = 'ADDRESS'\n county.source = 'ADDRESS'\n\n // update state with the results\n yield put({\n type : GeoCoordinateTypes.UPDATE_GEOCODED_LOCATION,\n address : addressCandidate,\n county,\n fireDistrict,\n region,\n trs,\n })\n return true\n }\n catch(e) {\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: 'An error occurred attempting to geocode the address.', })\n return false\n }\n}\n\nexport function* geocodeAddress ({ address, city, state, zip, }) {\n try {\n // call the address locator service to get address location candidates\n const result = yield call(addressLookup, { address, city, state, zip, })\n\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.log('result: ', result)\n }\n\n // if there aren't any results or no candidates just exit early\n if (!result || result.candidates.length < 1) {\n return false\n }\n else if (result.error) {\n yield call(showError, result.error)\n return\n }\n\n // extract the address candidate object\n const addressCandidate = result.candidates[0]\n addressCandidate.layerId = 'ADDRESS'\n\n // update state with the results\n yield put({\n type : GeoCoordinateTypes.UPDATE_GEOCODED_LOCATION,\n address : addressCandidate,\n })\n return true\n }\n catch(e) {\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: 'An error occurred attempting to geocode the address.', })\n return false\n }\n}\n\nexport function* addressLookup ({ address, city, state, zip, singleLine, format = 'json', }) {\n try {\n if ((!address || !city || !state || !zip) && !singleLine && !format) {\n return null\n }\n let requestUrl = `${REACT_APP_REQUEST_PROXY_URL}?${REACT_APP_WAMAS_GIS_SERVICES}Locators/USA_StreetAddress/GeocodeServer/findAddressCandidates?OutFields=Address`\n if (address) {\n requestUrl += `&Street=${address || ''}`\n }\n if (city) {\n requestUrl += `&City=${city || ''}`\n }\n if (state) {\n requestUrl += `&State=${state || ''}`\n }\n if (zip) {\n requestUrl += `&Zip=${zip || ''}`\n }\n if (singleLine) {\n requestUrl += `&Single+Line+Input=${encodeURI(singleLine || '')}`\n }\n if (format) {\n requestUrl += `&f=${format}`\n }\n\n const request = yield call(fetch, requestUrl, { 'method': 'GET', })\n\n if (!request.ok) {\n const error = request.statusText\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error, })\n return { error, }\n }\n\n const result = yield call([ request, 'json', ])\n\n if (objHasProp(result, 'error')) {\n const error = `An error occurred attempting to query address ${address}. See error: ${result.error.message}`\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error, })\n return error\n }\n\n return result\n }\n catch (error) {\n yield call(showError, error)\n }\n}\n\n\nexport function* coordIntFeatsQueryRequest (latitude, longitude, serviceUrl, outFields, includeGeometry = false, format = 'json') {\n if (!latitude || !longitude || !serviceUrl || !outFields) {\n return null\n }\n const returnGeometry = includeGeometry === true ? 'true' : 'false'\n let requestUrl = `${REACT_APP_REQUEST_PROXY_URL}?${serviceUrl}/query`\n + `?geometry=${longitude},${latitude}`\n + `&outFields=${outFields || '*'}`\n + `&f=${format}`\n + '&spatialRel=esriSpatialRelIntersects'\n + '&geometryType=esriGeometryPoint'\n + '&inSR=4326'\n + `&returnGeometry=${returnGeometry}`\n\n const request = yield call(fetch, requestUrl, { 'method': 'GET', })\n\n if (!request.ok) {\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: request.statusText, })\n return null\n }\n\n const result = yield call([ request, 'json', ])\n\n if (objHasProp(result, 'error')) {\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: `An error occurred attempting to query for ${longitude},${latitude}. See error: ${result.error.message}`, })\n return null\n }\n\n return result\n}\n\n\nexport function* getRegionByCoord (latitude, longitude) {\n try {\n const response = yield call(coordIntFeatsQueryRequest, latitude, longitude, REGIONS_SERVICE_URL, 'JURISDICT_LABEL_NM')\n const { features, } = response\n if (features && features.length > 0) {\n features[0].layerId = REGIONS.id\n return features[0]\n }\n return null\n }\n catch(e) {\n yield put({ \n type : GeoCoordinateTypes.GEOCODE_ERROR, \n error : `An error occurred attempting to get the Region that contains lat ${latitude} long ${longitude}.`, \n })\n return null\n }\n}\n\nexport function* getTRSByCoord (latitude, longitude) {\n try {\n const response = yield call(coordIntFeatsQueryRequest, latitude, longitude, TRS_SERVICE_URL, 'TOWNSHIP_NR,SECTION_NR,RANGE_NR,RANGE_DIR_CD', true, 'geojson')\n\n const { features, } = response\n if (features && features.length > 0) {\n features[0].layerId = TRS.id\n return features[0]\n }\n return null\n }\n catch(e) {\n yield put({ \n type : GeoCoordinateTypes.GEOCODE_ERROR, \n error : `An error occurred attempting to get the TRS that contains lat ${latitude} long ${longitude}.`, \n })\n return null\n }\n}\n\nexport function* getCountyByCoord (latitude, longitude) {\n try {\n const response = yield call(coordIntFeatsQueryRequest, latitude, longitude, COUNTIES_SERVICE_URL, 'COUNTY_NM')\n\n const { features, } = response\n if (features && features.length > 0) {\n features[0].layerId = COUNTIES.id\n return features[0]\n }\n return null\n }\n catch(e) {\n yield put({ \n type : GeoCoordinateTypes.GEOCODE_ERROR, \n error : `An error occurred attempting to get the County that contains lat ${latitude} long ${longitude}.`, \n })\n return null\n }\n}\n\nexport function* getFireDistrictByCoord (latitude, longitude) {\n try {\n const response = yield call(coordIntFeatsQueryRequest, latitude, longitude, FIRE_DISTRICTS_SERVICE_URL, 'FPD_DESC')\n\n const { features, } = response\n if (features && features.length > 0) {\n features[0].layerId = FIRE_DISTRICTS.id\n return features[0]\n }\n return null\n }\n catch(e) {\n yield put({ \n type : GeoCoordinateTypes.GEOCODE_ERROR, \n error : `An error occurred attempting to get the Fire District that contains lat ${latitude} long ${longitude}.`, \n })\n return null\n }\n}\n\nexport function* geocodeLocation ({ latitude, longitude, }) {\n try {\n const [ county, fireDistrict, region, trs, ] = yield all([\n call(getCountyByCoord, latitude, longitude),\n call(getFireDistrictByCoord, latitude, longitude),\n call(getRegionByCoord, latitude, longitude),\n call(getTRSByCoord, latitude, longitude),\n ])\n\n yield put({\n type: GeoCoordinateTypes.UPDATE_GEOCODED_LOCATION,\n county,\n fireDistrict,\n region,\n trs,\n })\n }\n catch (e) {\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: 'An error occurred attempting to gather location information.', })\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.error(e)\n }\n return null\n }\n}\n\n\nfunction prefixWithZero (number) {\n return number.toString().length === 1 ? `0${number}` : number\n}\n\nexport function* getTRSExtent ({ section, township, range, rangeDir, }) {\n // These values need to be prefixed with leading zeroes\n section = prefixWithZero(section)\n township = prefixWithZero(township)\n range = prefixWithZero(range)\n\n const whereClause = `SECTION_NR = '${section}' AND TOWNSHIP_NR = '${township}' AND RANGE_NR = '${range}' AND RANGE_DIR_CD = '${rangeDir}'`\n try {\n let requestUrl = `${REACT_APP_REQUEST_PROXY_URL}?${TRS_SERVICE_URL}/query`\n + `?where=${window.encodeURI(whereClause)}`\n + '&outFields=TRS_CD'\n + '&groupByFieldsForStatistics=TRS_CD'\n + '&f=geojson'\n\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.log('requestUrl: ', requestUrl)\n }\n yield put({ type: GeoCoordinateTypes.SET_IS_GEOCODING, })\n\n const request = yield call(fetch, requestUrl, { 'method': 'GET', })\n\n if (!request.ok) {\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: request.statusText, })\n return\n }\n\n const result = yield call([ request, 'json', ])\n\n if (REACT_APP_SHOW_LOGGING === 'true') {\n console.log('result: ', result)\n }\n // If a match, set it \n if (objHasProp(result, 'error')) {\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: `An error occurred attempting to query for ${whereClause}. See error: ${result.error.message}`, })\n return false\n }\n yield put({ type: GeoCoordinateTypes.TRS_SUCCESS, result, })\n return true\n }\n catch(e) {\n console.error(e)\n yield put({ type: GeoCoordinateTypes.GEOCODE_ERROR, error: `An error occurred attempting to query for ${whereClause}.`, })\n return false\n }\n}\n\nexport const GeoCoordinateSagas = [\n takeEvery(GeoCoordinateTypes.GEOCODE, geocode),\n takeEvery(GeoCoordinateTypes.GET_TRS_EXTENT, getTRSExtent),\n takeLatest(GeoCoordinateTypes.GET_TRS_BY_COORD, getTRSByCoord),\n takeLatest(GeoCoordinateTypes.GEOCODE_LOCATION_SECTION, geocodeLocation),\n takeLatest(GeoCoordinateTypes.GEOCODE_ADDRESS_FORM, geocodeAddress),\n]\n","import { createActions, } from 'reduxsauce'\n\n/* ------------- Types and Action Creators ------------- */\n\nconst { Types, Creators, } = createActions({\n getSearchLookupData: null,\n})\n\nexport const SearchTypes = Types\nexport default Creators","import { createSelector, } from 'reselect'\nimport {\n ormByIdSelector,\n ormSelector,\n ormWithPropSelector,\n propsSelector,\n} from './selectors'\n\n/*** State Selectors */\n\nconst customerInteractionState = state => state.CustomerInteraction\n\nexport const customerInteractionStateSelector = createSelector(\n customerInteractionState,\n propsSelector,\n (state, customerInteractionType) => state[customerInteractionType]\n)\n\nexport const customerInteractionStatusFormSelector = createSelector(\n customerInteractionState,\n (state) => state.status\n)\n\nexport const customerInteractionStatusFormOpenSelector = createSelector(\n customerInteractionState,\n (state) => state.status.showForm\n)\n\nexport const createdInteractionIdSelector = createSelector(\n customerInteractionState,\n state => state.id\n)\n\nexport const userAcknowledgedSmokeComplaintPrompt = createSelector(\n customerInteractionState,\n state => {\n return state.Smoke.acknowledgedPrompt\n }\n)\n\nexport const smokeComplaintassociatedBurns = createSelector(\n customerInteractionState,\n state => (state.associatedBurns.data || [])\n)\n\nexport const smokeComplaintPermitXrefs = ormWithPropSelector(\n ({ CustomerInteractionBurnPermitXref, }, CustomerInteractionId) => {\n if (!CustomerInteractionBurnPermitXref.all().exists()) {\n return []\n }\n let c = null\n try {\n CustomerInteractionId = parseInt(CustomerInteractionId)\n c = CustomerInteractionBurnPermitXref.filter({ CustomerInteractionId, })\n } catch (e) {\n c = null\n console.warn(`Could not find CustomerInteractionBurnPermitXrefs with CustomerInteractionId: ${CustomerInteractionId}`)\n }\n if (!c || !c.all().exists()) {\n return []\n }\n return c.all().toRefArray()\n }\n)\n\nexport const smokeComplaintAssociatedBurnSearchResults = createSelector(\n customerInteractionState,\n state => (state.associatedBurns.searchResults || [])\n)\n\nexport const associatedBurnsSearchParams = createSelector(\n customerInteractionState,\n state => (state.associatedBurns.searchParams || {})\n)\n\nexport const smokeComplaintAssociationFormIsVisible = createSelector(\n customerInteractionState,\n state => {\n return typeof state.associatedBurns.showForm === 'boolean'\n ? state.associatedBurns.showForm\n : false\n }\n)\n\nexport const customerInteractionTypeSelector = ormWithPropSelector(\n ({ CustomerInteractionType, }, CustomerInteractionTypeName) => {\n if (!CustomerInteractionType.all().exists()) {\n return null\n }\n let c = null\n try {\n c = CustomerInteractionType.get({ CustomerInteractionTypeName, })\n } catch (e) {\n c = null\n console.warn(`Could not find CustomerInteractionType with TypeName: ${CustomerInteractionTypeName}`)\n }\n if (!c) {\n return null\n }\n return {\n CustomerInteractionTypeId : c.CustomerInteractionTypeId,\n CustomerInteractionTypeName : c.CustomerInteractionTypeName,\n }\n }\n)\n\nexport const customerInteractionStatusesByIdSelector = ormWithPropSelector(\n ({ CustomerInteractionStatusXref, }, CustomerInteractionId) => {\n if (!CustomerInteractionStatusXref.all().exists()) {\n return []\n }\n let c = null\n try {\n c = CustomerInteractionStatusXref.filter({ CustomerInteractionId, })\n } catch (e) {\n c = null\n console.warn(`Could not find CustomerInteractionStatusXrefs with CustomerInteractionId: ${CustomerInteractionId}`)\n }\n if (!c || !c.all().exists()) {\n return []\n }\n return c.orderBy('StatusDate', 'desc')\n .toModelArray()\n .map(x => {\n return {\n StatusName : x.CustomerInteractionStatus.CustomerInteractionStatusName,\n StatusDate : x.StatusDate,\n AssignedTo : `${x.AssignedTo || 'unknown'}`,\n Comment : x.Comment,\n CommentInternalOnly : x.CommentInternalOnly,\n ContactedReportingParty : x.ContactedReportingParty,\n CreateBy : x.CreateBy,\n CreateDate : x.CreateDate,\n }\n })\n }\n)\n\nexport const smokeComplaintTypeId = ormSelector(\n ({ CustomerInteractionType, }) => {\n const interactionType = CustomerInteractionType.get({ CustomerInteractionTypeName: 'Smoke Complaint', })\n if (!interactionType) {\n return ''\n }\n return interactionType.CustomerInteractionTypeId || ''\n }\n)\n\nexport const getSmokeComplaintSelector = ormByIdSelector(\n smokeComplaintTypeId,\n ({ CustomerInteraction, }, CustomerInteractionId, CustomerInteractionTypeId) => {\n const defaultComplaint = {\n CustomerInteractionTypeId,\n RegionId : '',\n BurnPermitId : '',\n BurnRequestId : '',\n InteractionDescription : '',\n Latitude : '',\n Longitude : '',\n Address : '',\n FollowUp : '',\n FirstName : '',\n LastName : '',\n PhoneNumber : '',\n EmailAddress : '',\n CreateDate : '',\n CreateBy : '',\n }\n if (!CustomerInteractionId) {\n return defaultComplaint\n }\n const complaint = CustomerInteraction.get({ CustomerInteractionId, })\n if (!complaint) {\n return defaultComplaint\n }\n return {\n CustomerInteractionId : complaint.CustomerInteractionId || '',\n CustomerInteractionTypeId : complaint.CustomerInteractionTypeId,\n RegionId : complaint.RegionId || '',\n BurnPermitId : complaint.BurnPermitId || '',\n BurnRequestId : complaint.BurnRequestId || '',\n InteractionDescription : complaint.InteractionDescription || '',\n Latitude : complaint.Latitude || '',\n Longitude : complaint.Longitude || '',\n Address : complaint.Address || '',\n FollowUp : typeof complaint.FollowUp === 'boolean' ? complaint.FollowUp : '',\n FirstName : complaint.FirstName || '',\n LastName : complaint.LastName || '',\n PhoneNumber : complaint.PhoneNumber || '',\n EmailAddress : complaint.EmailAddress || '',\n CreateDate : complaint.CreateDate,\n CreateBy : complaint.CreateBy,\n }\n }\n)\n\nexport const smokeCompMapStateSelector = createSelector(\n customerInteractionState,\n ({ mapState, targetType, }) => {\n const { center, zoom, showMap, location, regionId, } = ((mapState || {})[targetType]) || {}\n return { center, zoom, showMap, location, regionId, }\n }\n)\n\nexport const custIntSearchParamsSelector = createSelector(\n customerInteractionState,\n propsSelector,\n ({ searchParams, }, custIntTypeId) => {\n if (!searchParams || Object.keys(searchParams).length === 0) {\n return {}\n }\n if (!custIntTypeId) {\n return {}\n }\n return searchParams[custIntTypeId] || {}\n }\n)\n\nexport const searchComplaintsSelector = createSelector(\n customerInteractionState,\n ({ targetType, searchResults, }) => {\n if (!searchResults || Object.keys(searchResults).length === 0) {\n return []\n }\n if (Array.isArray(searchResults[targetType]) !== true) {\n return []\n }\n return searchResults[targetType]\n }\n)\n\nexport const customerInteractionStatusesSelector = ormSelector(\n ({ CustomerInteractionStatus, }) => {\n return [\n {\n Value : -1,\n Text : 'Unassigned',\n },\n ...CustomerInteractionStatus.all()\n .orderBy('CustomerInteractionStatusName')\n .toRefArray()\n .map(s => {\n return {\n Value : s.CustomerInteractionStatusId,\n Text : s.CustomerInteractionStatusName,\n }\n }),\n ]\n }\n)\n\nexport const customerInteractionTypesSelector = ormSelector(\n ({ CustomerInteractionType, }) => {\n return CustomerInteractionType.all()\n .toRefArray()\n .map(s => {\n return {\n Value : s.CustomerInteractionTypeId,\n Text : s.CustomerInteractionTypeName,\n }\n })\n }\n)\n","import { ormWithPropSelector, } from './selectors'\r\n\r\nconst mapCounty = county => {\r\n if (!county) {\r\n return null\r\n }\r\n return {\r\n CountyId : county.CountyId,\r\n CountyName : county.CountyName,\r\n }\r\n}\r\n\r\nconst mapRegion = region => {\r\n if (!region) {\r\n return null\r\n }\r\n return {\r\n RegionId : region.RegionId,\r\n RegionCode : region.RegionCode,\r\n RegionName : region.RegionName,\r\n RegionAbbreviation : region.RegionAbbreviation,\r\n RegionDescription : region.RegionDescription,\r\n RegionPhoneId : region.PhoneId,\r\n RegionAddressId : region.AddressId,\r\n RegionEmailId : region.EmailId,\r\n CreateDate : region.CreateDate,\r\n CreateBy : region.CreateBy,\r\n UpdateDate : region.UpdateDate,\r\n UpdateBy : region.UpdateBy,\r\n RegionAddress : region.RegionAddress ? region.RegionAddress.toString() : '',\r\n RegionPhone : region.RegionPhone ? region.RegionPhone.toString() : '',\r\n RegionEmail : region.RegionEmail ? region.RegionEmail.toString() : '',\r\n RegionCounties : region.RegionCounties.orderBy('CountyName').toRefArray().map(mapCounty),\r\n }\r\n}\r\n\r\n/**\r\n * Selector for Regions\r\n */\r\nexport const allRegionsSelector = ormWithPropSelector(\r\n ({ Region, }, includeDivision = false) => {\r\n if (!Region.all().exists()) {\r\n return []\r\n }\r\n let regions = Region.all()\r\n if (includeDivision === false) {\r\n regions = regions.filter(r => r.RegionName !== 'Division')\r\n }\r\n return regions.orderBy('RegionName').toModelArray().map(mapRegion)\r\n }\r\n)\r\n\r\nexport const regionsForSelectSelector = ormWithPropSelector(\r\n ({ Region, }, includeDivision = false) => {\r\n if (!Region.all().exists()) {\r\n return []\r\n }\r\n let regions = Region.all()\r\n if (includeDivision === false) {\r\n regions = regions.filter(r => r.RegionName !== 'Division')\r\n }\r\n return regions.orderBy('RegionName').toModelArray().map((r) => {\r\n let defaultAssignee = null\r\n const qs = r.PersonRegionXrefs.filter({ RegionDefaultAssignee: true, })\r\n if (qs.exists()) {\r\n defaultAssignee = qs.first().PersonRegionXrefPersonId\r\n }\r\n return {\r\n Text : r.RegionName,\r\n Value : r.RegionId,\r\n DefaultAssignee : defaultAssignee,\r\n }\r\n })\r\n }\r\n)\r\n","// Libraries\nimport { put, call, takeLatest, select, all, } from 'redux-saga/effects'\n\n// Sagas\nimport { doFetch, getLookupData, showError, } from './ApiSagas'\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { replaceAll, upsertLocalModel, upsertLocalModels, } from './OrmSagas'\nimport { GetAllRegions, } from './RegionSagas'\nimport { addressLookup, getRegionByCoord, } from './GeoCoordinateSagas'\n\n// Reducers\nimport { SearchTypes, } from '../redux/SearchRedux'\nimport { CustomerInteractionTypes, } from '../redux/CustomerInteractionRedux'\n\n// Models\nimport CustomerInteractionStatusXref from '../models/CustomerInteractionStatusXref'\nimport CustomerInteractionStatus from '../models/CustomerInteractionStatus'\nimport CustomerInteractionType from '../models/CustomerInteractionType'\nimport CustomerInteraction from '../models/CustomerInteraction'\n\n// Selectors\nimport { userIsDNR, } from '../selectors/userSelectors'\nimport {\n associatedBurnsSearchParams,\n smokeComplaintPermitXrefs,\n smokeComplaintAssociationFormIsVisible,\n} from '../selectors/customerInteractionSelectors'\nimport { regionsForSelectSelector, } from '../selectors/regionSelectors'\n\n// Utilities\nimport { objectToQueryParams, } from '../utilities'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER_URL, } = process.env\n\nconst CUSTOMER_INTERACTION_ENDPOINT = CustomerInteraction.endpoint()\n\nexport function* getCustomerInteractionLookupData () {\n try {\n yield call(showLoading)\n\n yield all([\n call(getLookupData, { modelName: CustomerInteractionStatus.modelName, }),\n call(getLookupData, { modelName: CustomerInteractionType.modelName, }),\n call(GetAllRegions),\n call(getLookupData, { modelName: 'FireDistrictDepartment', }),\n ])\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* getCustomerInteraction ({ id, }) {\n try {\n yield call(showLoading)\n const userIsDnr = yield select(userIsDNR)\n if (userIsDnr) {\n yield call(getCustomerInteractionStatuses, { id, })\n }\n const url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/${id}`\n const resp = yield call(doFetch, url)\n if (!resp.ok) {\n yield call(showError, resp.responseBody)\n }\n yield call(upsertLocalModel, CustomerInteraction.modelName, resp.responseBody)\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* getCustomerInteractionStatuses ({ id, }) {\n try {\n yield call(showLoading)\n const url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/${id}/Statuses`\n const resp = yield call(doFetch, url)\n if (!resp.ok) {\n yield call(showError, resp.responseBody)\n }\n yield call(upsertLocalModels, CustomerInteractionStatusXref.modelName, resp.responseBody)\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* upsertCustomerInteraction ({ values, }) {\n try {\n yield call(showLoading)\n let method = 'POST'\n let url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}`\n const userIsDnr = yield select(userIsDNR)\n let { CustomerInteractionId, } = values\n if (CustomerInteractionId > 0) {\n url += `/${CustomerInteractionId}`\n method = 'PUT'\n }\n if (!values.RegionId) {\n console.warn('[CUSTOMER_INTERACTION] No RegionId found, looking up RegionId based on lat/long')\n if (values.Latitude && values.Longitude) {\n const region = yield call(getRegionByCoord, values.Latitude, values.Longitude)\n if (region) {\n const regions = yield select(regionsForSelectSelector)\n const [ { Value, }, ] = regions.filter(r => r.Text === region.attributes.JURISDICT_LABEL_NM)\n values.RegionId = Value\n }\n }\n }\n delete values.CreateBy\n delete values.CreateDate\n delete values.UpdateBy\n delete values.UpdateDate\n const resp = yield call(doFetch, url, { method, body: values, })\n if (!resp.ok) {\n yield call(showError, resp.responseBody)\n }\n if ('responseBody' in resp && !!resp.responseBody) {\n CustomerInteractionId = resp.responseBody.CustomerInteractionId\n yield call(upsertLocalModel, CustomerInteraction.modelName, resp.responseBody)\n }\n else if (userIsDnr) {\n yield call(getCustomerInteraction, { id: CustomerInteractionId, })\n }\n yield put({ type: CustomerInteractionTypes.UPSERT_CUSTOMER_INTERACTION_SUCCESS, id: CustomerInteractionId, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* createCustomerInteractionStatus ({ values, }) {\n try {\n yield call(showLoading)\n const { CustomerInteractionId, } = values\n let method = 'POST'\n let url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/${CustomerInteractionId}/Status`\n const resp = yield call(doFetch, url, { method, body: values, })\n if (!resp.ok) {\n yield call(showError, resp.responseBody)\n }\n yield call(upsertLocalModel, CustomerInteractionStatusXref.modelName, resp.responseBody)\n yield put({\n type : CustomerInteractionTypes.SHOW_CUSTOMER_INTERACTION_STATUS_FORM,\n showForm : false,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* searchCustomerInteractions ({ searchParams, }) {\n try {\n\n if (!searchParams.submit) {\n console.warn('The property `submit` was not found or not set to true.')\n return\n }\n else if (!searchParams || Object.values(searchParams).every(v => !v)) {\n yield call(showError, 'You must set at least one Customer Interaction search parameter.')\n return\n }\n\n yield call(showLoading)\n\n const url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/Search?${objectToQueryParams(searchParams)}`\n\n const resp = yield call(doFetch, url)\n if (resp.ok !== true || Array.isArray(resp.responseBody) === false) {\n let error = 'An error searching for Customer Interactions.'\n if (resp.responseBody && 'error' in resp.responseBody) {\n error = resp.responseBody.error\n }\n yield call(showError, error)\n return\n }\n yield put({\n type : CustomerInteractionTypes.SEARCH_CUSTOMER_INTERACTIONS_RESULTS,\n results : resp.responseBody,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nexport function* findAssociatedBurns ({ searchParams, }) {\n try {\n\n if (!searchParams.submit) {\n console.warn('The property `submit` was not found or not set to true.')\n return\n }\n if (!searchParams || Object.values(searchParams).every(v => !v)) {\n yield call(showError, 'You must set at least one Burn search parameter.')\n return\n }\n\n yield call(showLoading)\n\n const url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/Search/BurnPermits?${objectToQueryParams(searchParams)}`\n\n const resp = yield call(doFetch, url)\n if (resp.ok !== true || Array.isArray(resp.responseBody) === false) {\n let error = 'An error searching for Burns.'\n if (resp.responseBody && 'error' in resp.responseBody) {\n error = resp.responseBody.error\n }\n yield call(showError, error)\n return\n }\n yield call(getBurnPermitXrefs, { id: searchParams.CustomerInteractionId, })\n yield put({\n type : CustomerInteractionTypes.FIND_ASSOCIATED_BURNS_RESULTS,\n data : resp.responseBody,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* getCustomerInteractionBurnPermits ({ id, }) {\n try {\n yield call(showLoading)\n\n const resp = yield call(doFetch, `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/${id}/BurnPermits`)\n if (resp.ok !== true || Array.isArray(resp.responseBody) === false) {\n let error = 'An error getting associated Burn Requests.'\n if (resp.responseBody && 'error' in resp.responseBody) {\n error = resp.responseBody.error\n }\n yield call(showError, error)\n return\n }\n yield call(getBurnPermitXrefs, { id, })\n yield put({\n type : CustomerInteractionTypes.ASSOCIATED_BURNS,\n data : resp.responseBody,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* getBurnPermitXrefs ({ id, }) {\n try {\n yield call(showLoading)\n\n const xrefsUrl = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/${id}/BurnPermitXrefs`\n\n const xrefsResp = yield call(doFetch, xrefsUrl)\n if (xrefsResp.ok !== true || Array.isArray(xrefsResp.responseBody) === false) {\n let error = 'An error getting associated Burn Permit Xrefs.'\n if (xrefsResp.responseBody && 'error' in xrefsResp.responseBody) {\n error = xrefsResp.responseBody.error\n }\n yield call(showError, error)\n return\n }\n yield call(replaceAll, 'CustomerInteractionBurnPermitXref', [ ...xrefsResp.responseBody, ])\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* associateBurnPermit ({ values, }) {\n try {\n yield call(showLoading)\n\n const { CustomerInteractionId, } = values\n const url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/${CustomerInteractionId}/BurnPermitXref`\n\n const resp = yield call(doFetch, url, { method: 'POST', body: values, })\n if (resp.ok !== true) {\n let error = 'An error associating Burn Permit.'\n if (resp.responseBody && 'error' in resp.responseBody) {\n error = resp.responseBody.error\n }\n yield call(showError, error)\n return\n }\n yield call(refreshAssociatedPermits, { id: CustomerInteractionId, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* removeBurnPermitAssociation ({ values, }) {\n try {\n yield call(showLoading)\n const { CustomerInteractionId, BurnPermitId, } = values\n let xrefs = yield select(smokeComplaintPermitXrefs, CustomerInteractionId)\n xrefs = xrefs.filter(x => x.BurnPermitId === BurnPermitId)\n if (!xrefs.length) {\n yield call(showError, 'No Customer Interaction Burn Permit Xref found to delete')\n return\n }\n const [ { CustomerInteractionBurnPermitXrefId, }, ] = xrefs\n const url = `${REACT_APP_SERVER_URL}${CUSTOMER_INTERACTION_ENDPOINT}/${CustomerInteractionId}/BurnPermitXref/${CustomerInteractionBurnPermitXrefId}`\n\n const resp = yield call(doFetch, url, { method: 'DELETE', })\n if (resp.ok !== true) {\n let error = 'An error removing Burn Permit association.'\n if (resp.responseBody && 'error' in resp.responseBody) {\n error = resp.responseBody.error\n }\n yield call(showError, error)\n return\n }\n yield call(refreshAssociatedPermits, { id: CustomerInteractionId, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\nfunction* refreshAssociatedPermits ({ id, }) {\n const formIsActive = yield select(smokeComplaintAssociationFormIsVisible)\n if (formIsActive) {\n const searchParams = yield select(associatedBurnsSearchParams)\n // make sure submit is set to true\n yield call(findAssociatedBurns, { searchParams: { ...searchParams, submit: true, }, })\n }\n else {\n yield call(getCustomerInteractionBurnPermits, { id, })\n }\n}\n\nfunction* geocode ({ address, }) {\n try {\n if (!address) {\n console.warn('No address provided to geocode')\n return\n }\n\n yield call(showLoading)\n\n const addrLoc = yield call(addressLookup, { singleLine: address, format: 'json', })\n if (!addrLoc || addrLoc.error) {\n let error = 'Could not geocode customer interaction address'\n if (addrLoc && addrLoc.error) {\n error = addrLoc.error\n }\n yield call(showError, error)\n return\n }\n const [ { location, }, ] = addrLoc.candidates.sort((a, b) => b.score - a.score)\n const region = yield call(getRegionByCoord, location.y, location.x)\n let regionId = null\n if (region) {\n const regions = yield select(regionsForSelectSelector)\n const [ { Value, }, ] = regions.filter(r => r.Text === region.attributes.JURISDICT_LABEL_NM)\n regionId = Value\n }\n yield put({\n type: CustomerInteractionTypes.GEOCODE_CUST_INT_ADDRESS_SUCCESS,\n location,\n regionId,\n })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\nexport const CustomerInteractionSagas = [\n takeLatest(CustomerInteractionTypes.GET_CUSTOMER_INTERACTION, getCustomerInteraction),\n takeLatest(CustomerInteractionTypes.NEW_CUSTOMER_INTERACTION, getCustomerInteractionLookupData),\n takeLatest(CustomerInteractionTypes.UPSERT_CUSTOMER_INTERACTION, upsertCustomerInteraction),\n takeLatest(CustomerInteractionTypes.CREATE_CUSTOMER_INTERACTION_STATUS, createCustomerInteractionStatus),\n takeLatest(CustomerInteractionTypes.SUBMIT_SMOKE_COMPLAINT, upsertCustomerInteraction),\n takeLatest(CustomerInteractionTypes.SEARCH_CUSTOMER_INTERACTIONS, searchCustomerInteractions),\n takeLatest(CustomerInteractionTypes.FIND_ASSOCIATED_BURNS, findAssociatedBurns),\n takeLatest(CustomerInteractionTypes.GET_ASSOCIATED_BURNS, getCustomerInteractionBurnPermits),\n takeLatest(CustomerInteractionTypes.ASSOCIATE_BURN, associateBurnPermit),\n takeLatest(CustomerInteractionTypes.REMOVE_BURN_ASSOCIATION, removeBurnPermitAssociation),\n takeLatest(CustomerInteractionTypes.GEOCODE_CUST_INT_ADDRESS, geocode),\n takeLatest(SearchTypes.GET_SEARCH_LOOKUP_DATA, getCustomerInteractionLookupData),\n]\n","import { put, takeEvery, call, } from 'redux-saga/effects'\nimport { DashboardTypes, } from '../redux/DashboardRedux'\nimport { doFetch, } from './ApiSagas'\n\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER, REACT_APP_SERVER_URL, } = process.env\n\nfunction* getDashboardMessages () {\n try {\n const url = `${REACT_APP_SERVER_URL}Dashboard/Notices`\n const msgs = yield call(doFetch, url)\n if (!msgs.ok) {\n console.error('Error refreshing dashboard messages.')\n return\n }\n yield put({\n type : DashboardTypes.SET_DASH_MSGS,\n messages : msgs.responseBody,\n })\n } catch (error) {\n console.error('Error refreshing dashboard messages.')\n }\n}\n\n\nexport function* getTileLinks () {\n try{\n const url = `${REACT_APP_SERVER_URL}Dashboard/Links`\n const links = yield call(doFetch, url)\n if (!links.ok) {\n console.error('Error refreshing dashboard links.')\n return\n }\n\n const sanitizedLinks = {\n ...links.responseBody,\n }\n\n for (let prop in sanitizedLinks) {\n const cleanLinks = sanitizedLinks[prop].map(l => {\n if (l.Href.endsWith('.pdf')) {\n l.Href = l.Href.concat('?'+ (new Date()).getTime())\n }\n if (l.Href.includes('$SERVER')) {\n l.Href = l.Href.replace('$SERVER', REACT_APP_SERVER)\n }\n return {\n heading : l.Heading,\n href : l.Href,\n text : l.Text,\n }\n })\n sanitizedLinks[prop] = cleanLinks\n }\n\n yield put({\n type : DashboardTypes.SET_TILE_LINKS,\n links : sanitizedLinks,\n })\n } catch (error) {\n console.error('Error refreshing dashboard links.')\n }\n\n}\n\nexport const DashboardSagas = [\n takeEvery(DashboardTypes.GET_TILE_LINKS, getTileLinks),\n takeEvery(DashboardTypes.GET_DASH_MSGS, getDashboardMessages),\n]","// Libraries\nimport { fork, put, call, takeLatest, } from 'redux-saga/effects'\n\n// Sagas\nimport { doFetch, showError, } from './ApiSagas'\nimport { hideLoading, showLoading, } from './AppSagas'\nimport { downloadFile, } from './FileSagas'\n\n// Reducers\nimport { ApiTypes, } from '../redux/ApiRedux'\nimport { ReportTypes, } from '../redux/ReportsRedux'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER, } = process.env\nconst REPORT_SERVER_URL = `${REACT_APP_SERVER}Reports`\n\n\nfunction* getReports () {\n try {\n\n yield call(showLoading)\n\n const resp = yield call(doFetch, REPORT_SERVER_URL)\n if (resp.ok !== true) {\n const error = resp.responseBody.error || 'An error occurred requesting reports.'\n yield put({ type: ApiTypes.FAILURE, error, })\n return\n }\n\n const reports = []\n\n const { value, } = resp.responseBody\n for(let i = 0, len = value.length; i < len; i++) {\n const report = value[i]\n report.Name = report.Name.split(/(?=[A-Z])/).join(' ')\n reports.push(report)\n }\n\n yield put({ type: ReportTypes.SET_REPORTS, reports, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n yield put({ type: ReportTypes.REPORTS_DONE_LOADING, })\n }\n}\n\n\nfunction* downloadReport ({ reportPath, format, }) {\n try {\n\n yield call(showLoading)\n\n const resp = yield call(doFetch, `${REPORT_SERVER_URL}/Export?reportPath=${reportPath}&format=${format}`)\n if (resp.ok !== true) {\n const error = resp.responseBody.error || 'An error occurred requesting report export.'\n yield put({ type: ApiTypes.FAILURE, error, })\n return\n }\n\n const { fileCode, } = resp.responseBody\n\n yield fork(downloadFile, { url: `${REPORT_SERVER_URL}/Download/${fileCode}`, })\n }\n catch (error) {\n yield call(showError, error)\n }\n finally {\n yield call(hideLoading)\n }\n}\n\n\nexport const ReportSagas = [\n takeLatest(ReportTypes.GET_REPORTS, getReports),\n takeLatest(ReportTypes.DOWNLOAD_REPORT, downloadReport),\n]","import { createSelector, } from 'reselect'\nimport { ormSelector, ormByIdSelector, } from './selectors'\n\nconst rulesStateSelector = state => state.Rules\n\nexport const rulesSelector = ormSelector(\n session => {\n if (!session.Rule || !session.Rule.all().exists()) {\n return []\n }\n return session.Rule.all().orderBy('RuleId').toRefArray()\n }\n)\n\nexport const ruleSelector = ormByIdSelector(\n (session, RuleId) => {\n if (isNaN(RuleId) || !session.Rule || !session.Rule.idExists(RuleId)) {\n return null\n }\n return session.Rule.withId(RuleId)\n }\n)\n\n\nexport const rulesLoadingSelector = createSelector(\n rulesStateSelector,\n ({ rulesLoading, }) => rulesLoading ? rulesLoading : false\n)\n\nexport const ruleUpdatingSelector = createSelector(\n rulesStateSelector,\n ({ ruleUpdating, }) => ruleUpdating ? ruleUpdating : []\n)\n\nexport const ruleUpdatedSelector = createSelector(\n rulesStateSelector,\n ({ ruleUpdated, }) => ruleUpdated ? ruleUpdated : []\n)\n\nexport const ruleUpdateFailedSelector = createSelector(\n rulesStateSelector,\n ({ ruleUpdateFailed, }) => ruleUpdateFailed ? ruleUpdateFailed : []\n)","// Libraries\r\nimport { put, call, takeLatest, select, takeEvery, } from 'redux-saga/effects'\r\n\r\n// Sagas\r\nimport { doFetch, showError, } from './ApiSagas'\r\nimport { hideLoading, showLoading, } from './AppSagas'\r\n\r\n// Reducers\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { AppTypes, } from '../redux/AppRedux'\r\nimport { RuleTypes, } from '../redux/RulesRedux'\r\n\r\n// Models\r\nimport Rule from '../models/Rule'\r\nimport { OrmTypes, } from '../redux/OrmRedux'\r\nimport { ruleSelector, } from '../selectors/ruleSelectors'\r\n\r\nfunction* getRules () {\r\n try {\r\n yield call(showLoading)\r\n const endpoint = `${Rule.endpoint()}`\r\n const resp = yield call(doFetch, endpoint, { method: 'GET', })\r\n if (resp.ok !== true) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'An error occurred retrieving Rules.', })\r\n return\r\n }\r\n\r\n const rules = resp.responseBody\r\n let parsedRules = []\r\n if (Array.isArray(rules)) {\r\n parsedRules = rules.map((x) => {\r\n if (x.RuleType !== 'json-links'){\r\n return x\r\n }\r\n try {\r\n x.RuleValue = JSON.parse(x.RuleValue)\r\n } catch (e) {\r\n console.error('failed parsing json for rule ' + x.RuleId)\r\n }\r\n return x\r\n })\r\n }\r\n \r\n yield put({\r\n type : OrmTypes.REPLACE_ALL,\r\n modelName : 'Rule',\r\n objects : parsedRules,\r\n })\r\n\r\n } catch (error) {\r\n console.error('error: ', error)\r\n yield put({ type: ApiTypes.FAILURE, error: error.message, })\r\n } finally {\r\n yield put({ type: RuleTypes.RULES_LOADED, })\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* sanitizeJSON (valueToClean) {\r\n if (!valueToClean) {\r\n return null\r\n }\r\n const cleaned = yield call([ JSON, JSON.stringify, ], valueToClean)\r\n return cleaned\r\n}\r\n\r\n\r\nfunction* updateRule ({ id, payload, }) {\r\n if (!id || !payload) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'Required information was not proved to update a rule.', })\r\n return\r\n }\r\n try {\r\n yield call(showLoading)\r\n const endpoint = `${Rule.endpoint()}/${id}`\r\n\r\n const ruleToPut = {\r\n ...payload,\r\n }\r\n\r\n if (ruleToPut.RuleType === 'json-links') {\r\n ruleToPut.RuleValue = yield call(sanitizeJSON, ruleToPut.RuleValue)\r\n }\r\n\r\n const resp = yield call(doFetch, endpoint, { method: 'PUT', body: ruleToPut, })\r\n if (resp.ok !== true) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'An error occurred updating the Rule.', })\r\n yield put({ type: RuleTypes.RULE_UPDATE_FAILED, id, })\r\n return\r\n }\r\n\r\n const ruleToUpsert = yield select(ruleSelector, id)\r\n if (!ruleToUpsert) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'Your changes were saved but an error has occurred. Please reload the page before continuing.', })\r\n yield put({ type: RuleTypes.RULE_UPDATE_FAILED, id, })\r\n return\r\n }\r\n\r\n const updateObj = {\r\n RuleDescription : payload.RuleDescription,\r\n RuleValue : payload.RuleValue,\r\n RuleEnabled : payload.RuleEnabled,\r\n }\r\n\r\n yield put({ \r\n type : OrmTypes.UPDATE,\r\n modelName : 'Rule',\r\n modelId : id,\r\n updateObj,\r\n })\r\n yield put({ type: RuleTypes.RULE_UPDATED, id, })\r\n yield put({ type: AppTypes.SHOW_SUCCESS, })\r\n } catch (error) {\r\n yield put({ type: RuleTypes.RULE_UPDATE_FAILED, id, })\r\n yield call(showError, error)\r\n } finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nexport const RulesSagas = [\r\n takeLatest(RuleTypes.GET_RULES, getRules),\r\n takeEvery(RuleTypes.UPDATE_RULE, updateRule),\r\n]","// Libraries\r\nimport { all, call, put, takeLatest, } from 'redux-saga/effects'\r\n\r\n// Reducers\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { SearchTypes, } from '../redux/SearchRedux'\r\nimport BurnPermitSearchActions, { BurnPermitSearchTypes, } from '../redux/BurnPermitSearchRedux'\r\nimport BurnRequestSearchActions, { BurnRequestSearchTypes, } from '../redux/BurnRequestSearchRedux'\r\n\r\n// Models\r\nimport BurnPermitSearch from '../models/BurnPermitSearch'\r\nimport BurnRequestSearch from '../models/BurnRequestSearch'\r\nimport BurnPermit from '../models/BurnPermit'\r\nimport BurnRequest from '../models/BurnRequest'\r\n\r\n// Sagas\r\nimport { showError, } from './ApiSagas'\r\nimport { hideLoading, showLoading, } from './AppSagas'\r\nimport { destroyAll, replaceAll, } from './OrmSagas'\r\nimport { GetAllRegions, } from './RegionSagas'\r\nimport { doFetch, } from './ApiSagas'\r\nimport { downloadFile, } from './FileSagas'\r\n\r\nconst BURN_PERMIT_ENDPOINT = BurnPermit.endpoint()\r\nconst BURN_REQUEST_ENDPOINT = BurnRequest.endpoint()\r\n\r\n// Constants\r\nconst BURN_PERMIT_SEARCH_MODEL_NAME = BurnPermitSearch.modelName\r\nconst BURN_REQUEST_SEARCH_MODEL_NAME = BurnRequestSearch.modelName\r\n\r\n\r\nfunction* getLookupData () {\r\n yield all([\r\n put({ type: ApiTypes.LOOKUP_DATA, modelName: 'County', }),\r\n call(GetAllRegions),\r\n put({ type: ApiTypes.LOOKUP_DATA, modelName: 'BurnPermitApplicationStatus', }),\r\n put({ type: ApiTypes.LOOKUP_DATA, modelName: 'BurnPermitStatus', }),\r\n put({ type: ApiTypes.LOOKUP_DATA, modelName: 'BurnRequestStatus', }),\r\n put({ type: ApiTypes.LOOKUP_DATA, modelName: 'BurnType', }),\r\n ])\r\n}\r\n\r\nfunction* searchBurnPermitsSuccess ({ payload, }) {\r\n try {\r\n const results = yield call([ payload, payload.json, ])\r\n yield call(replaceAll, BURN_PERMIT_SEARCH_MODEL_NAME, results)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* clearSearchPermits () {\r\n try {\r\n yield call(destroyAll, BURN_PERMIT_SEARCH_MODEL_NAME)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* clearSearchRequests () {\r\n try {\r\n yield call(destroyAll, BURN_REQUEST_SEARCH_MODEL_NAME)\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\n\r\nexport function* downloadPermitsExport () {\r\n try {\r\n yield call(showLoading)\r\n\r\n const requestUrl = `${BURN_PERMIT_ENDPOINT}/Export`\r\n const response = yield call(doFetch, requestUrl)\r\n\r\n const { downloadUrl, fileName, } = response.responseBody\r\n\r\n if (downloadUrl && fileName) {\r\n yield call(downloadFile, { url: downloadUrl, fileName, })\r\n } else {\r\n yield call(showError, 'An error occurred requesting the permit export.')\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield all([\r\n call(hideLoading),\r\n put(BurnPermitSearchActions.setDownloadingPermitsExport(false)),\r\n ])\r\n }\r\n}\r\n\r\nexport function* downloadRequestsExport () {\r\n try {\r\n yield call(showLoading)\r\n\r\n const requestUrl = `${BURN_REQUEST_ENDPOINT}/Export`\r\n const response = yield call(doFetch, requestUrl)\r\n\r\n const { downloadUrl, fileName, } = response.responseBody\r\n\r\n if (downloadUrl && fileName) {\r\n yield call(downloadFile, { url: downloadUrl, fileName, })\r\n } else {\r\n yield call(showError, 'An error occurred requesting the permit export.')\r\n }\r\n }\r\n catch (error) {\r\n yield call(showError, error)\r\n }\r\n finally {\r\n yield all([\r\n call(hideLoading),\r\n put(BurnRequestSearchActions.setDownloadingRequestsExport(false)),\r\n ])\r\n }\r\n}\r\n\r\nexport const SearchSagas = [\r\n takeLatest(SearchTypes.GET_SEARCH_LOOKUP_DATA, getLookupData),\r\n takeLatest(BurnPermitSearchTypes.SEARCH_BURN_PERMITS_SUCCESS, searchBurnPermitsSuccess),\r\n takeLatest(BurnPermitSearchTypes.DOWNLOAD_PERMITS_EXPORT, downloadPermitsExport),\r\n takeLatest(BurnPermitSearchTypes.RESET_PERMIT_RESULTS, clearSearchPermits),\r\n takeLatest(BurnRequestSearchTypes.RESET_REQUEST_RESULTS, clearSearchRequests),\r\n takeLatest(BurnRequestSearchTypes.DOWNLOAD_REQUESTS_EXPORT, downloadRequestsExport),\r\n]","// Libraries\r\nimport { put, call, all, takeEvery, select, } from 'redux-saga/effects'\r\nimport * as jwt from 'jsonwebtoken' \r\n\r\n// Sagas\r\nimport { doFetch, } from './ApiSagas'\r\nimport { hideLoading, showLoading, } from './AppSagas'\r\nimport { checkPersonBurnRequests, getPerson, } from './PersonSagas'\r\n\r\n// Reducers\r\nimport { ApiTypes, } from '../redux/ApiRedux'\r\nimport { UserTypes, } from '../redux/UserRedux'\r\nimport { AppTypes, } from '../redux/AppRedux'\r\n\r\n//Selectors\r\nimport { networkStateSelector, } from '../selectors/selectors'\r\nimport { getUserToken, } from '../selectors/userSelectors'\r\n\r\n// CONSTANTS\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER, } = process.env\r\nconst REQUEST_URL = REACT_APP_SERVER + 'Account/GetUserInfo'\r\nconst LOGOUT_URL = REACT_APP_SERVER + 'Account/Logout'\r\nconst CHECK_AGENT_URL = REACT_APP_SERVER + 'Account/IsVerified'\r\n\r\n/**\r\n * Parse JWT and set user groups when login is received\r\n * @param {object} action - The login response from ADFS/SAW\r\n * @param {String} action.token - The JWT to parse for groups\r\n */\r\nexport function* login ({ token, }) {\r\n // if there's no token, error out immediately\r\n if (!token) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'Could not get user info, no JWT was provided.', })\r\n yield put({ type: UserTypes.USER_INFO_ERROR, error: 'Could not get user info, no JWT was provided.', })\r\n return\r\n }\r\n\r\n // indicate that we're loading profile information\r\n yield put({ type: UserTypes.USER_FETCH_START, })\r\n\r\n try {\r\n // decode groups from JWT\r\n const validationSuccess = yield call(processJWTGroups, token)\r\n if (!validationSuccess) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'JWT group processing failed.', })\r\n yield put({ type: UserTypes.USER_INFO_ERROR, error: 'JWT group processing failed.', })\r\n return\r\n }\r\n\r\n /*\r\n get user information. this may require a rework \r\n if the redux-saga package has a major revision. \r\n rely on this effect running after the reducer,\r\n as is the current expected behavior\r\n */\r\n const userObj = yield call(userInfoRequest)\r\n if (!userObj || !userObj.personId) {\r\n return \r\n }\r\n\r\n // get person information if a person id was provided\r\n // this will update the user's agency status in state\r\n yield call(getPerson, { personId: userObj.personId, })\r\n\r\n try {\r\n yield call(checkPersonBurnRequests, { personId: userObj.personId, })\r\n } catch (error) {\r\n yield put({ type: ApiTypes.FAILURE, error, })\r\n }\r\n }\r\n catch (error) {\r\n yield put({ type: ApiTypes.FAILURE, error, })\r\n yield put({ type: UserTypes.USER_INFO_ERROR, error: 'An error occurred while requesting user data.', })\r\n }\r\n finally {\r\n yield put({ type: UserTypes.USER_FETCH_END, })\r\n }\r\n}\r\n\r\nfunction* processJWTGroups (token) {\r\n if (!token) {\r\n console.error('No JWT was provided to parse groups from.')\r\n return false\r\n }\r\n try {\r\n // TODO: Verify signature here\r\n const decoded = yield call([ jwt, jwt.decode, ], token)\r\n const groupKey = Object.keys(decoded).find(k => k.indexOf('group') > -1)\r\n const decGroups = decoded[groupKey]\r\n let groups = []\r\n\r\n if (decGroups) {\r\n if (Array.isArray(decGroups)) {\r\n groups = yield call([ groups, 'concat', ], decGroups)\r\n } else {\r\n yield call([ groups, 'push', ], decGroups)\r\n }\r\n }\r\n if (groups) {\r\n yield put({ type: UserTypes.SET_GROUPS, groups, })\r\n }\r\n return true\r\n }\r\n catch (error) {\r\n yield put({ type: ApiTypes.FAILURE, error: 'Failed processing user login information. Please log out and then log back in.', })\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * This builds the XHR request and handles the return data.\r\n * @returns {bool}\r\n */\r\nexport function* logout () {\r\n yield call(showLoading)\r\n // No matter what, log out locally\r\n yield all([\r\n put({ type: UserTypes.DESTROY_TOKEN_AND_RESET_STATE, }),\r\n put({ type: AppTypes.SET_RETURN_URL, returnUrl: '', }),\r\n put({ type: ApiTypes.CLEAR_LOOKUP_CHECKS, }),\r\n // If it fails, it's prob cuz we're no longer authenticated, so don't worry about the response\r\n call(doFetch, LOGOUT_URL, { method: 'POST', }),\r\n ])\r\n yield call(hideLoading)\r\n}\r\n\r\nexport function* userInfoRequest () {\r\n yield call(showLoading)\r\n try {\r\n const request = yield call(doFetch, REQUEST_URL)\r\n\r\n if (request.ok === false) {\r\n yield put({ type: UserTypes.USER_INFO_ERROR, error: 'Could not get user info.', })\r\n return null\r\n }\r\n\r\n const { UserInfo, } = request.responseBody\r\n if (!UserInfo || !UserInfo.PersonId || !UserInfo.UserName) {\r\n yield put({ type: UserTypes.USER_INFO_ERROR, error: 'User info was malformed.', })\r\n return null\r\n }\r\n const userObj = { personId: UserInfo.PersonId, userName: UserInfo.UserName, }\r\n yield put({ type: UserTypes.USER_INFO_SUCCESS, ...userObj, })\r\n return userObj\r\n }\r\n catch (error) {\r\n yield put({ type: UserTypes.USER_INFO_ERROR, error, })\r\n yield put({ type: ApiTypes.FAILURE, error, })\r\n }\r\n finally {\r\n yield call(hideLoading)\r\n }\r\n}\r\n\r\nfunction* checkAgentVerification () {\r\n const { online, } = yield select(networkStateSelector)\r\n if (online) {\r\n const res = yield call(doFetch, CHECK_AGENT_URL)\r\n const { responseBody, statusCode, ok, } = res\r\n if (statusCode !== 200 || !ok) {\r\n yield put({\r\n type : ApiTypes.FAILURE,\r\n error : 'Failed checking agent verification status.',\r\n })\r\n return\r\n }\r\n\r\n if (responseBody === true) {\r\n yield put({\r\n type : UserTypes.UPDATE_USER_AGENCY_STATUS,\r\n isVerifiedAgent : responseBody,\r\n })\r\n }\r\n }\r\n}\r\n\r\nfunction* checkTokenExpiration () {\r\n const token = yield select(getUserToken)\r\n if (!token) {\r\n yield put({ type: UserTypes.LOGOUT, })\r\n }\r\n const { exp, } = yield call([ jwt, jwt.decode, ], token)\r\n const expirationDate = new Date(1970, 0, 1)\r\n expirationDate.setSeconds(exp)\r\n expirationDate.setHours(expirationDate.getHours() - (expirationDate.getTimezoneOffset() / 60))\r\n const isExpired = expirationDate.getTime() < Date.now()\r\n if (isExpired) {\r\n yield put({ type: ApiTypes.GENERAL_MESSAGE, title: 'Session Expired', message: 'Your session has expired. Please log in again to continue using the Burn Portal.', })\r\n yield put({ type: UserTypes.LOGOUT, })\r\n }\r\n}\r\n\r\nexport const UserSagas = [\r\n takeEvery(UserTypes.USER_INFO_REQUEST, userInfoRequest),\r\n takeEvery(UserTypes.LOGIN_RECEIVED, login),\r\n takeEvery(UserTypes.LOGOUT, logout),\r\n takeEvery(UserTypes.CHECK_AGENT_VERIFICATION, checkAgentVerification),\r\n takeEvery(UserTypes.CHECK_TOKEN_EXPIRATION, checkTokenExpiration),\r\n]\r\n","import { all, spawn, } from 'redux-saga/effects'\n\n/* ------------- Sagas ------------- */\nimport { AgencySagas, } from './AgencySagas'\nimport { ApiSagas, } from './ApiSagas'\nimport { BurnNoticeSubscriberSagas, } from './BurnNoticeSubscriberSagas'\nimport { BurnPermitAreaSagas, } from './BurnPermitAreaSagas'\nimport { BurnPermitApplicantInfoSagas, } from './BurnPermitApplicantInfoSagas'\nimport { BurnPermitConditionSagas, } from './BurnPermitConditionSagas'\nimport { BurnPermitFuelsSagas, } from './BurnPermitFuelsSagas'\nimport { BurnPermitLocationSagas, } from './BurnPermitLocationSagas'\nimport { BurnPermitOrderSagas, } from './BurnPermitOrdersSagas'\nimport { BurnPermitPileGroupSagas, } from './BurnPermitPileGroupSagas'\nimport { BurnPermitSiteSagas, } from './BurnPermitSiteSagas'\nimport { BurnPermitSagas, } from './BurnPermitSagas'\nimport { BurnPermitSignatureSagas, } from './BurnPermitSignatureSagas'\nimport { BurnRequestDetailSagas, } from './BurnRequestDetailSagas'\nimport { CalendarSagas, } from './CalendarSagas'\nimport { CustomerInteractionSagas, } from './CustomerInteractionSagas'\nimport { DashboardSagas, } from './DashboardSagas'\nimport { ForestHealthSagas, } from './ForestHealthSagas'\nimport { GeoCoordinateSagas, } from './GeoCoordinateSagas'\nimport { PersonSagas, } from './PersonSagas'\nimport { PostBurnSagas, } from './PostBurnSagas'\nimport { RegionSagas, } from './RegionSagas'\nimport { ReportSagas, } from './ReportSagas'\nimport { RulesSagas, } from './RulesSagas'\nimport { SearchSagas, } from './SearchSagas'\nimport { UserSagas, } from './UserSagas'\n\n\nexport default function* root () {\n const allSagas = [\n AgencySagas,\n ApiSagas,\n BurnNoticeSubscriberSagas,\n BurnPermitAreaSagas,\n BurnPermitApplicantInfoSagas,\n BurnPermitConditionSagas,\n BurnPermitFuelsSagas,\n BurnPermitLocationSagas,\n BurnPermitOrderSagas,\n BurnPermitPileGroupSagas,\n BurnPermitSagas,\n BurnPermitSiteSagas,\n BurnPermitSignatureSagas,\n BurnRequestDetailSagas,\n CalendarSagas,\n CustomerInteractionSagas,\n DashboardSagas,\n ForestHealthSagas,\n GeoCoordinateSagas,\n PersonSagas,\n PostBurnSagas,\n RegionSagas,\n ReportSagas,\n RulesSagas,\n SearchSagas,\n UserSagas,\n ].reduce((acc, val) => acc.concat(val), [])\n\n // Now when sagas fail or an action type is not found, it won't kill all the other sagas\n yield all(\n allSagas.map(saga => {\n return spawn(function* () {\n while (true) {\n try {\n yield saga\n break\n }\n catch (e) {\n console.error(e)\n }\n }\n })\n })\n )\n}","import React from 'react'\r\nimport {\r\n useLocation,\r\n useNavigate,\r\n useParams,\r\n} from 'react-router-dom'\r\n\r\nfunction withRouter (Component) {\r\n function ComponentWithRouterProp (props) {\r\n const location = useLocation()\r\n const navigate = useNavigate()\r\n const params = useParams()\r\n props = {\r\n ...props,\r\n location,\r\n navigate,\r\n params,\r\n }\r\n return \r\n }\r\n\r\n return ComponentWithRouterProp\r\n}\r\n\r\nexport default withRouter","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { array, func, object, } from 'prop-types'\r\nimport { Toast, ToastBody, ToastHeader, } from 'reactstrap'\r\n\r\n// Actions\r\nimport ApiActions from '../redux/ApiRedux'\r\n\r\n// Components\r\nimport withRouter from './withRouter'\r\n\r\nclass ErrorMessage extends React.Component {\r\n\r\n static propTypes = {\r\n // from withRouter HOC\r\n location: object,\r\n\r\n requestError : array,\r\n ClearError : func,\r\n ClearAllErrors : func,\r\n }\r\n\r\n onClick = evt => {\r\n const { id, } = evt.target.dataset\r\n this.props.ClearError(id)\r\n }\r\n\r\n // This should clear the errors on change of the route\r\n componentDidUpdate (prevProps) {\r\n const { location, ClearAllErrors, } = this.props\r\n if (prevProps.location.pathname !== location.pathname) {\r\n ClearAllErrors()\r\n }\r\n }\r\n \r\n render () {\r\n const { requestError, } = this.props\r\n if (requestError.length === 0) {\r\n return null\r\n }\r\n const errors = []\r\n for (let i = 0, len = requestError.length; i < len; i++) {\r\n const error = requestError[i]\r\n errors.push(\r\n \r\n \r\n \r\n Error\r\n {error.occurredAt}\r\n \r\n \r\n \r\n {error.message}\r\n \r\n \r\n )\r\n }\r\n return
{errors}
\r\n }\r\n}\r\n \r\nconst mapStateToProps = (state) => {\r\n return {\r\n requestError: state.api.requestError,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ClearError : ApiActions.clearError,\r\n ClearAllErrors : ApiActions.clearAllErrors,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ErrorMessage))","import React from 'react'\nimport { object, string, } from 'prop-types'\n\nexport const DangerIcon = props => {\n const { style, title, } = props\n return \n}\n\nDangerIcon.propTypes = {\n style : object,\n title : string,\n}\n\nDangerIcon.defaultProps = {\n style : {},\n title : '',\n}\n\nexport default DangerIcon","import React, { useMemo, } from 'react'\r\n\r\nfunction DownloadPDF () {\r\n const style = useMemo(() => ({ 'fontSize': '1.5em', color: 'red', }), [])\r\n return \r\n}\r\n\r\nexport default DownloadPDF","import React from 'react'\nimport { string, object, } from 'prop-types'\n\nexport const SuccessIcon = props => {\n const { className, style, title, } = props\n let cssClasses = 'fa fa-check-circle text-success'\n if (className) {\n cssClasses += ` ${cssClasses}`\n }\n return \n}\n\nSuccessIcon.propTypes = {\n className : string,\n style : object,\n title : string,\n}\n\nSuccessIcon.defaultProps = {\n style : {},\n title : '',\n}\n\nexport default SuccessIcon","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Toast, ToastBody, } from 'reactstrap'\nimport { func, bool, } from 'prop-types'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\n\n// Components\nimport { SuccessIcon, } from './Icons'\n\n \nclass SuccessToast extends React.Component {\n\n static propTypes = {\n onSuccess : func,\n HideSuccess : func,\n ShowSuccess : bool,\n }\n \n onClick = () => {\n if (typeof this.props.onSuccess === 'function') {\n this.props.onSuccess()\n }\n this.props.HideSuccess()\n }\n\n componentDidUpdate = (prevProps) => {\n if (prevProps.ShowSuccess === false && this.props.ShowSuccess === true) {\n setTimeout(this.props.HideSuccess, 3000)\n }\n }\n\n render () {\n const { ShowSuccess, } = this.props\n\n if (!ShowSuccess) {\n return null\n }\n\n return (\n \n \n \n Success\n \n \n \n )\n }\n}\n\nfunction mapStateToProps (state) {\n return {\n ShowSuccess: state.app.showSuccess,\n }\n}\n\nconst mapDispatchToProps = {\n HideSuccess: AppActions.hideSuccess,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SuccessToast)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { array, object, func, string, PropTypes, } from 'prop-types'\nimport { Container, Row, Col, Card, CardHeader, CardBody, CardText, } from 'reactstrap'\nimport StackTrace from 'stacktrace-js'\nimport localforage from 'localforage'\n\n// Reducers\nimport ApiActions from '../redux/ApiRedux'\nimport AppActions from '../redux/AppRedux'\n\n// Components\nimport withRouter from './withRouter'\n\n\nclass ErrorBoundary extends React.Component {\n\n static propTypes = {\n // from withRouter HOC\n location: object,\n\n children : PropTypes.oneOfType([ array, object, ]),\n SetPageTitle : func,\n LogError : func,\n authInfo : object,\n appVersion : string,\n }\n \n state = { hasError: false, }\n\n static getDerivedStateFromError () {\n // Update state so the next render will show the fallback UI.\n return { hasError: true, }\n }\n\n getState = async () => {\n const itemKeys = [ 'persist:wa_dnr_burn_portal', ]\n\n const value = await localforage.getItem(itemKeys)\n if (value) {\n return value.toString().replace(/\\\\/g, '')\n }\n return null\n }\n\n postError = async (error, errorInfo) => {\n const { authInfo, appVersion, } = this.props\n const localState = await this.getState()\n StackTrace.fromError(error)\n .then(err => {\n this.props.LogError(JSON.stringify({\n authInfo,\n appVersion,\n date : new Date(),\n url : window.location.href,\n agent : window.navigator.userAgent,\n errorMsg : error.toString(),\n errorInfo,\n error : err,\n }), localState)\n })\n }\n\n componentDidCatch (error, errorInfo) {\n this.postError(error, errorInfo)\n }\n\n componentDidUpdate = (prevProps, prevState) => {\n const { location, } = this.props\n if (prevProps.location.pathname !== location.pathname) {\n this.setState({ hasError: false, })\n }\n if (prevState.hasError === false && this.state.hasError === true) {\n this.props.SetPageTitle('Error')\n }\n }\n\n render () {\n if (this.state.hasError) {\n return \n \n \n \n \n Error\n \n \n {'We\\'re sorry, but there is an issue with the action you are trying to perform.'}\n
{'We have logged the issue and we\\'ll resolve is as soon as possible.'}\n
Feel free to report the issue as well.\n
\n
\n
\n \n
\n
\n }\n\n return this.props.children\n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n LogError : ApiActions.logError,\n}\n\nexport default withRouter(connect(null, mapDispatchToProps)(ErrorBoundary))","// Libraries\nimport React, { Component, } from 'react'\nimport { connect, } from 'react-redux'\nimport { bool, string, object, PropTypes, } from 'prop-types'\nimport { Progress, } from 'reactstrap'\n\nclass LoadingBar extends Component {\n\n static propTypes = {\n showLoading : bool.isRequired,\n show : PropTypes.oneOfType([ bool, string, ]),\n className : string,\n style : object,\n }\n\n static defaultProps = {\n className: '',\n }\n \n render () {\n const { showLoading, show, className, style, } = this.props\n if (show === false) {\n return null\n }\n\n return \n }\n}\n \nfunction mapStateToProps (state) {\n return {\n showLoading: state.app.showLoading,\n }\n}\n\nexport default connect(mapStateToProps)(LoadingBar)","import { createSelector, } from 'reselect'\nimport { propsSelector, } from './selectors'\n\n/*** State Selectors */\n\nconst uiState = state => state.ui || {}\n\nexport const uiSelector = createSelector(\n uiState,\n ui => {\n return {\n Modal: {\n showModal : ui.Modal.showModal || false,\n modalKey : ui.Modal.modalKey || '',\n },\n }\n }\n)\n\nexport const isModalOpen = createSelector(\n uiState,\n propsSelector,\n (ui, modalKey) => {\n return ui.Modal.modalKey === modalKey && ui.Modal.showModal\n }\n)\n\nexport const isNavbarOpen = createSelector(\n uiState,\n ({ Navbar, }) => {\n const { isOpen, } = Navbar || { isOpen: false, }\n return isOpen\n }\n)\n","import React from 'react'\r\nimport { Button, UncontrolledPopover, PopoverHeader, PopoverBody, } from 'reactstrap'\r\nimport { string, object, PropTypes, func, bool, } from 'prop-types'\r\n\r\nfunction toggleOpenClass (e) {\r\n if (e.target.nodeName.toLowerCase() === 'button') {\r\n e.target.firstElementChild.classList.toggle('open')\r\n }\r\n else {\r\n e.target.classList.toggle('open')\r\n }\r\n}\r\n\r\nconst PopoverButton = props => {\r\n const {\r\n color,\r\n buttonClassName,\r\n iconClassName,\r\n popoverClassName,\r\n placement,\r\n popoverHeader,\r\n popoverBody,\r\n disabled,\r\n style,\r\n label,\r\n } = props\r\n const id = `po-${popoverHeader.split(' ').join('')}`\r\n const iconClass = `info-button fa ${iconClassName}`\r\n const className = `po ${buttonClassName}`\r\n return <>\r\n \r\n \r\n {popoverHeader}\r\n {popoverBody}\r\n \r\n \r\n}\r\n\r\nPopoverButton.propTypes = {\r\n color : string,\r\n buttonClassName : string,\r\n popoverClassName : string,\r\n iconClassName : string,\r\n placement : string,\r\n popoverHeader : string.isRequired,\r\n popoverBody : PropTypes.oneOfType([ string, object, ]),\r\n onClick : func,\r\n disabled : bool,\r\n style : object,\r\n label : string,\r\n}\r\n\r\nPopoverButton.defaultProps = {\r\n color : 'link',\r\n placement : 'top',\r\n buttonClassName : '',\r\n iconClassName : 'fa-info',\r\n disabled : false,\r\n popoverClassName : '',\r\n}\r\n\r\nexport default PopoverButton","import React from 'react'\nimport PopoverButton from './FormControls/PopoverButton'\nimport { bool, } from 'prop-types'\n\n\nexport const NetworkStatus = props => {\n const { online, } = props\n \n const networkIcon = `fa-wifi text-white bg-${online ? 'success' : 'danger'}`\n\n return \n

Current status: {online ? 'Online' : 'Offline'}

\n

\n This application is capable of offline functionality.\n However, when using this application offline, you will have limited functionality as \n you will not have access to the internet.\n You must be logged in on your device before going offline.\n

\n

What you can do offline:

\n
    \n
  • Create a new Burn Permit Application
  • \n
  • Create a new Burn Request
  • \n
  • Enter new Post Burn data
  • \n
  • Search and view your saved Burn Permits and Burn Requests
  • \n
\n

What you cannot do offline:

\n
    \n
  • Log in
  • \n
  • Edit your user profile
  • \n
  • Create and pay for Permit Orders
  • \n
  • Sign Applications and Permits
  • \n
\n }\n placement={'bottom'}\n />\n}\n\nNetworkStatus.propTypes = {\n online: bool,\n}\n\nNetworkStatus.defaultProps = {\n online: true,\n}\n\nexport default NetworkStatus","import { useEffect, useRef, } from 'react'\n\nfunction useInterval (callback, delay) {\n const savedCallback = useRef()\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback\n }, [ callback, ])\n\n // Set up the interval.\n useEffect(() => {\n function tick () {\n if (typeof savedCallback.current === 'function') {\n savedCallback.current()\n }\n }\n if (delay !== null) {\n let id = setInterval(tick, delay)\n return () => clearInterval(id)\n }\n }, [ delay, ])\n}\n\nexport default useInterval\n","import { useSelector, } from 'react-redux'\r\nimport { appIsOnlineSelector, } from '../selectors/selectors'\r\n\r\nfunction useOnlineSelector () {\r\n return useSelector(appIsOnlineSelector)\r\n}\r\n\r\nexport default useOnlineSelector\r\n","import { useState, useCallback, } from 'react'\r\n\r\nconst useToggle = (defaultValue = false) => {\r\n const [ toggleState, setToggleState, ] = useState(defaultValue)\r\n const toggle = useCallback(() => {\r\n setToggleState(!toggleState)\r\n }, [ toggleState, ])\r\n return [ toggleState, toggle, ]\r\n}\r\n\r\nexport default useToggle","import { useCallback, } from 'react'\n\n// Actions\nimport UiActions from '../redux/UiRedux'\nimport { useSelector, } from 'react-redux'\nimport { isModalOpen, } from '../selectors/uiSelectors'\n\n/**\n * A hook to abstract the redux action calls and selector to\n * manage a modal dialog's open or closed state\n * @param {import('redux').Dispatch} dispatch Redux dispatch\n * @param {string} modalKey The modal key to open and track\n * @returns {[boolean, import('react').MouseEventHandler | any, import('react').MouseEventHandler | any]} Array of the following order:\n * - {bool} modalIsOpen\n * - {func} showModal\n * - {func} closeModal\n */\nconst useShowModal = (dispatch, modalKey) => {\n const modalIsOpen = useSelector(state => isModalOpen(state, modalKey))\n const showModal = useCallback(() => {\n dispatch(UiActions.openModal(modalKey))\n }, [ dispatch, modalKey, ])\n const closeModal = useCallback(() => {\n dispatch(UiActions.closeModal())\n }, [ dispatch, ])\n return [ modalIsOpen, showModal, closeModal, ]\n}\n\nexport default useShowModal\n","/**\n * Utility function to preventDefault and stopPropagation if an Event object is provided\n * @param {MouseEvent} evt \n */\nconst stopEvent = (evt) => {\n if (evt) {\n if (typeof evt.preventDefault === 'function') {\n evt.preventDefault()\n }\n if (typeof evt.stopPropagation === 'function') {\n evt.stopPropagation()\n }\n }\n}\nexport default stopEvent","import React, { useCallback, } from 'react'\nimport { render as ReactDOMRender, } from 'react-dom'\nimport { useNavigate, } from 'react-router-dom'\n\nimport stopEvent from '../utilities/stopEvent'\n\nconst useTableCellLink = ({ route, text = null, }) => {\n\n const navigate = useNavigate()\n\n const linkCellCallback = useCallback((td, cellData) => {\n return ReactDOMRender(\n {\n stopEvent(e)\n navigate(`/${route}/${cellData}`)\n }}>{text || `View #${cellData}`}\n , td)\n }, [ text, route, navigate, ])\n\n return linkCellCallback\n}\n\nexport default useTableCellLink\n","import { useCallback, } from 'react'\n\nconst useGetSearchExportFilename = (filenamePrefix = 'Export') => {\n const now = useCallback(() => (new Date()).getTime(), [])\n return useCallback(() => [ filenamePrefix, now(), ].join('_'), [ filenamePrefix, now, ])\n}\n\nexport default useGetSearchExportFilename\n","import { useCallback, useEffect, } from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Reducer Actions\nimport UIActions from '../redux/UiRedux'\n\n// Selectors\nimport { isNavbarOpen, } from '../selectors/uiSelectors'\n\nconst useToggleNavbar = (dispatch) => {\n const navbarOpen = useSelector(isNavbarOpen)\n useEffect(() => {\n let overflow = 'auto'\n if (navbarOpen) {\n overflow = 'hidden'\n }\n document.body.style.overflow = overflow\n }, [ navbarOpen, ])\n const toggleNavbar = useCallback(() => {\n dispatch(UIActions.toggleNavbar())\n }, [ dispatch, ])\n return [ navbarOpen, toggleNavbar, ]\n}\n\nexport default useToggleNavbar\n","export default __webpack_public_path__ + \"static/media/dnr_logo_white.616aaf9d.png\";","import React, { useCallback, useEffect, useMemo, useState, } from 'react'\nimport { Link, } from 'react-router-dom'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport {\n Navbar,\n Nav,\n NavbarBrand,\n NavbarToggler,\n NavItem,\n PopoverBody,\n PopoverHeader,\n Popover,\n Container,\n} from 'reactstrap'\n\n// Selectors\nimport { appVersionSelector, } from '../../selectors/appSelectors'\nimport { authPropsSelector, userNameSelector, userPersonIdSelector, } from '../../selectors/userSelectors'\n\n// Components\nimport NetworkStatus from './../NetworkStatus'\n\n// Hooks\nimport { useOnlineSelector, } from '../../hooks'\nimport useToggleNavbar from '../../hooks/useToggleNavbar'\n\n\nimport logo from '../../images/dnr_logo_white.png'\n\n\nconst {\n REACT_APP_SUPPORT_EMAIL,\n // eslint-disable-next-line no-undef\n} = process.env\n\nconst Banner = () => {\n // State and refs\n const [ helpOpen, setHelpOpen, ] = useState(false)\n\n // Reducers\n const dispatch = useDispatch()\n\n // Selectors\n const AppVersion = useSelector(appVersionSelector)\n const online = useOnlineSelector()\n const authProps = useSelector(authPropsSelector)\n const userName = useSelector(userNameSelector)\n const userId = useSelector(userPersonIdSelector)\n\n\n // UI Callbacks\n const mailTo = useMemo(() => {\n const authInfo = {\n isAuthenticated : authProps.isAuthenticated,\n isAgent : authProps.isAgent,\n isGovAgent : authProps.isGovAgent,\n isDnr : authProps.isDnr,\n userId : userId,\n userName : userName,\n }\n let mailToBody = 'Hello,\\r\\n\\r\\nI am trying to use the Burn Portal to...'\n mailToBody += `\\r\\n\\r\\n\nPLEASE DO NOT DELETE THE INFORMATION BELOW THIS LINE\n----------------------------------------------------------------------------------\nVersion ${AppVersion}\nDate ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}\nURL ${window.location.href}\nBrowser Agent ${window.navigator.userAgent}\nUser Info ${Object.entries(authInfo).reduce((s, e) => { return `${s}\\r\\n ${e[0]}: ${e[1]}` }, '')}\n`\n return `mailto:${REACT_APP_SUPPORT_EMAIL}?Subject=Burn Portal Help&Body=${encodeURIComponent(mailToBody)}`\n }, [ AppVersion, authProps, userId, userName, ])\n\n const contactSupportStyle = useMemo(() => ({ color: '#fff', position: 'absolute', top: 0, right: '1em', }), [])\n\n const navbarHref = useMemo(() => (online ? 'https://dnr.wa.gov' : '/'), [ online, ])\n\n const toggleHelp = useCallback(() => {\n setHelpOpen(!helpOpen)\n }, [ helpOpen, setHelpOpen, ])\n\n useEffect(() => {\n if (helpOpen) {\n setTimeout(function () {\n // Tried creating a passing a ref to the Popover component, but the\n // reactstrap library doesn't expose that interface\n const pop = document.getElementsByClassName('help-popover')\n if (pop && pop.length) {\n pop[0].getElementsByClassName('popover-body')[0].focus()\n }\n }, 500)\n }\n }, [ helpOpen, ])\n\n const [ ,toggleNavbar, ] = useToggleNavbar(dispatch)\n\n\n const markup = \n \n \n \n \n \n <>\n \n Contact Support\n | v{AppVersion}\n \n Burn Portal Help\n \n

If you are experiencing an issue with this website, please send an email to our support group by clicking this link: {REACT_APP_SUPPORT_EMAIL}

\n

If you have questions regarding how to use this website, please visit our Help page for more information.

\n
\n \n \n
\n
\n \n return markup\n}\n\nexport default React.memo(Banner)\n","import { useCallback, } from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Reducer Actions\nimport UIActions from '../redux/UiRedux'\n\n// Selectors\nimport { isNavbarOpen, } from '../selectors/uiSelectors'\n\nconst useNavClick = dispatch => {\n const navbarOpen = useSelector(isNavbarOpen)\n const toggleNavbar = useCallback(() => {\n if (navbarOpen) {\n dispatch(UIActions.toggleNavbar())\n }\n }, [ dispatch, navbarOpen, ])\n return [ navbarOpen, toggleNavbar, ]\n}\n\nexport default useNavClick\n","import React, { useMemo, } from 'react'\nimport { useDispatch, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { DropdownItem, NavLink, } from 'reactstrap'\nimport { bool, element, object, string, oneOfType, } from 'prop-types'\n\n// Hooks\nimport useNavClick from '../../hooks/useNavClick'\n\n\nconst NavbarDropdownItem = props => {\n const {\n children,\n disabled,\n href,\n to,\n text,\n title,\n } = props\n \n const itemProps = {\n title: title || text,\n disabled,\n }\n if (to) {\n itemProps.to = to\n }\n if (href) {\n itemProps.href = href\n }\n\n // Redux actions\n const dispatch = useDispatch()\n\n const [ ,toggleNavbar, ] = useNavClick(dispatch)\n\n const dropdownItemStyle = useMemo(() => ({ padding: 0, }), [])\n\n const markup = \n \n {children || text}\n \n \n return markup\n}\n\nNavbarDropdownItem.defaultProps = {\n style: {},\n}\n\nNavbarDropdownItem.propTypes = {\n children : oneOfType([ string, element, ]),\n disabled : bool,\n href : string,\n style : object,\n to : string,\n text : string,\n title : string,\n}\n\nexport default React.memo(NavbarDropdownItem)","import React, { useState, useCallback, } from 'react'\nimport { arrayOf, element, object, string, oneOfType, } from 'prop-types'\nimport {\n Dropdown,\n DropdownMenu,\n DropdownToggle,\n} from 'reactstrap'\n\n\nconst NavbarDropdown = props => {\n const { children, menuStyle, title, text, } = props\n // State and refs\n const [ dropdownOpen, setDropdownOpen, ] = useState(false)\n\n // UI Callbacks\n const toggleDropdown = useCallback(() => {\n setDropdownOpen(!dropdownOpen)\n }, [ setDropdownOpen, dropdownOpen, ])\n\n const markup = \n \n {text}\n \n \n {children}\n \n \n return markup\n}\n\nNavbarDropdown.propTypes = {\n children : oneOfType([ string, element, arrayOf(element), ]),\n menuStyle : object,\n text : oneOfType([ string, arrayOf(element), ]),\n title : string,\n}\n\nexport default React.memo(NavbarDropdown)","import React from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Components\nimport NavbarDropdownItem from '../NavbarDropdownItem'\nimport NavbarDropdown from '../NavbarDropdown'\n\n// Selectors\nimport { userCanViewAdminMenu, } from '../../../selectors/permissionSelectors'\n\n\nconst Admin = () => {\n // Selectors\n const canViewAdminMenu = useSelector(userCanViewAdminMenu)\n\n if (!canViewAdminMenu) {\n return null\n }\n\n const markup = \n \n People\n \n \n Agencies\n \n \n Regions\n \n \n Reports\n \n \n Rules & Settings\n \n \n return markup\n}\n\nexport default React.memo(Admin)\n","import React from 'react'\nimport { useDispatch, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { NavItem, NavLink, } from 'reactstrap'\nimport { bool, element, oneOfType, string, } from 'prop-types'\n\n// Hooks\nimport useNavClick from '../../hooks/useNavClick'\n\n\nconst NavbarItem = (props) => {\n const {\n children,\n disabled,\n href,\n to,\n text,\n title,\n } = props\n \n const itemProps = {\n title: title || text,\n disabled,\n }\n if (to) {\n itemProps.to = to\n }\n if (href) {\n itemProps.href = href\n }\n\n // Redux actions\n const dispatch = useDispatch()\n\n const [ ,toggleNavbar, ] = useNavClick(dispatch)\n\n const markup = \n \n {children || text}\n \n \n return markup\n}\n\nNavbarItem.propTypes = {\n disabled : bool,\n children : oneOfType([ element, string, ]),\n href : string,\n to : string,\n text : string,\n title : string,\n}\n\nexport default React.memo(NavbarItem)\n","import React from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Components\nimport NavbarItem from '../NavbarItem'\n\n// Selectors\nimport { userCanViewAdminMenu, } from '../../../selectors/permissionSelectors'\n\n\nconst Regions = () => {\n const canViewAdminMenu = useSelector(userCanViewAdminMenu)\n if (canViewAdminMenu) {\n return null\n }\n const markup = \n return markup\n}\n\nexport default React.memo(Regions)\n","import React from 'react'\n\n// Components\nimport NavbarItem from '../NavbarItem'\n\n\nconst Calendar = () => {\n const markup = \n return markup\n}\n\nexport default React.memo(Calendar)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Components\nimport NavbarItem from '../NavbarItem'\n\n// Selectors\nimport { isNavbarOpen, } from '../../../selectors/uiSelectors'\n\n\nconst Dashboard = () => {\n // Selectors\n const navbarOpen = useSelector(isNavbarOpen)\n\n // UI Callbacks\n const itemText = useMemo(() => {\n if (!navbarOpen) {\n return null\n }\n return Dashboard\n }, [ navbarOpen, ])\n\n const markup = \n <>\n {itemText}\n \n \n \n return markup\n}\n\nexport default React.memo(Dashboard)\n","import React from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Selectors\nimport { userCanManageAgentPeople, } from '../../../selectors/permissionSelectors'\n\n// Components\nimport NavbarItem from '../NavbarItem'\n\n\nconst Landowners = () => {\n const canViewAgentPeople = useSelector(userCanManageAgentPeople)\n if (!canViewAgentPeople) {\n return null\n }\n const markup = \n return markup\n}\n\nexport default React.memo(Landowners)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Components\nimport NavbarDropdownItem from '../NavbarDropdownItem'\nimport NavbarDropdown from '../NavbarDropdown'\n\n// Selectors\nimport { userCanCreateNewPermit, userMakesPayments, } from '../../../selectors/permissionSelectors'\n\n\nconst Permits = () => {\n // Selectors\n const canCreateNewPermit = useSelector(userCanCreateNewPermit)\n const canMakePayments = useSelector(userMakesPayments)\n\n const PermitsAndApplyLinks = useMemo(() => {\n if (!canCreateNewPermit) {\n return null\n }\n return <>\n \n My Permits\n \n \n Apply\n \n \n }, [ canCreateNewPermit, ])\n\n const OrdersLink = useMemo(() => {\n if (!canMakePayments) {\n return null\n }\n return \n Orders\n \n }, [ canMakePayments, ])\n\n const menuStyles = useMemo(() => ({ width: 'auto', }), [])\n\n const markup = \n {PermitsAndApplyLinks}\n \n Search\n \n {OrdersLink}\n \n return markup\n}\n\nexport default React.memo(Permits)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Components\nimport NavbarDropdownItem from '../NavbarDropdownItem'\nimport NavbarDropdown from '../NavbarDropdown'\n\n// Selectors\nimport { userCanCreateNewRequest, } from '../../../selectors/permissionSelectors'\nimport { userIsAuthenticated, } from '../../../selectors/userSelectors'\n\n\nconst BurnRequests = () => {\n // Selectors\n const canCreateNewRequest = useSelector(userCanCreateNewRequest)\n const isAuthenticated = useSelector(userIsAuthenticated)\n\n const RequestsAndCreateLinks = useMemo(() => {\n if (!canCreateNewRequest) {\n return null\n }\n return <>\n \n My Requests\n \n \n New\n \n \n }, [ canCreateNewRequest, ])\n\n const PostBurnLink = useMemo(() => {\n if (!isAuthenticated) {\n return null\n }\n return \n Enter Post-Burn\n \n }, [ isAuthenticated, ])\n\n const markup = \n {RequestsAndCreateLinks}\n {PostBurnLink}\n \n Search\n \n \n return markup\n}\n\nexport default React.memo(BurnRequests)\n","import React from 'react'\n\n// Components\nimport NavbarItem from '../NavbarItem'\n\n\nconst SmokeComplaints = () => {\n const markup = \n return markup\n}\n\nexport default React.memo(SmokeComplaints)\n","import React from 'react'\n\n// Components\nimport NavbarDropdownItem from '../NavbarDropdownItem'\nimport NavbarDropdown from '../NavbarDropdown'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_BURN_NOTICES_ENABLED, } = process.env\n\nconst BurnNoticeSubscriber = () => {\n if (REACT_APP_BURN_NOTICES_ENABLED !== 'true') {\n return null\n }\n const markup = \n \n Subscribe to Burn Notices\n \n \n return markup\n}\n\nexport default React.memo(BurnNoticeSubscriber)\n","import React from 'react'\nimport { Nav, } from 'reactstrap'\n\n// Components\nimport Admin from './Admin'\nimport Regions from './Regions'\nimport Calendar from './Calendar'\nimport Dashboard from './Dashboard'\nimport Landowners from './Landowners'\nimport Permits from './Permits'\nimport BurnRequests from './BurnRequests'\nimport SmokeComplaints from './SmokeComplaints'\nimport BurnNoticeSubscriber from './BurnNoticeSubscriber'\n\nconst LeftNavbarItems = () => {\n return \n}\n\nexport default React.memo(LeftNavbarItems)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Components\nimport NavbarItem from '../NavbarItem'\n\n// Selectors\nimport { isNavbarOpen, } from '../../../selectors/uiSelectors'\n\n\nconst Help = () => {\n // Selectors\n const navbarOpen = useSelector(isNavbarOpen)\n\n // UI Callbacks\n const itemText = useMemo(() => {\n if (!navbarOpen) {\n return null\n }\n return Help\n }, [ navbarOpen, ])\n\n const markup = \n <>\n {itemText}\n \n \n \n return markup\n}\n\nexport default React.memo(Help)\n","import React, { useCallback, useEffect, } from 'react'\nimport { useSelector, useDispatch, } from 'react-redux'\nimport { Link, useNavigate, } from 'react-router-dom'\n\n// Selectors\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\nimport { userIsAuthenticated, } from '../../../selectors/userSelectors'\n\n// Reducers\nimport UserActions from '../../../redux/UserRedux'\n\n\nconst Logout = () => {\n // Selectors\n const online = useSelector(appIsOnlineSelector)\n const isAuthenticated = useSelector(userIsAuthenticated)\n\n // Redux actions\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n // UI Callbacks\n const logout = useCallback(() => {\n dispatch(UserActions.logout())\n // todo\n // close this menu item and close the navbar\n }, [ dispatch, ])\n\n // mount effect\n useEffect(() => {\n if (!isAuthenticated) {\n navigate('/')\n }\n }, [ navigate, isAuthenticated, ])\n\n const markup = \n Logout\n \n return markup\n}\n\nexport default React.memo(Logout)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\nimport {\n NavLink,\n} from 'reactstrap'\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\n\n// Selectors\nimport { userIsAuthenticated, } from '../../../selectors/userSelectors'\n\n// Components\nimport NavbarDropdown from '../NavbarDropdown'\nimport NavbarDropdownItem from '../NavbarDropdownItem'\nimport Logout from './Logout'\n\nconst {\n REACT_APP_SAW_LOGIN_URL,\n REACT_APP_SERVER,\n // eslint-disable-next-line no-undef\n} = process.env\nconst ADFS_LOGIN_URL = `${REACT_APP_SERVER}Account/ADFS`\n\nconst Account = () => {\n\n // Selectors\n const isAuthenticated = useSelector(userIsAuthenticated)\n const online = useSelector(appIsOnlineSelector)\n\n const MenuItems = useMemo(() => {\n if (isAuthenticated) {\n return <>\n \n My Profile\n \n \n \n }\n return <>\n \n Public (SAW)\n \n \n WA State Employee\n \n \n }, [ online, isAuthenticated, ])\n\n const dropdownText = useMemo(() => (isAuthenticated ? 'Account' : 'Login'), [ isAuthenticated, ])\n\n const markup = \n {MenuItems}\n \n return markup\n}\n\nexport default React.memo(Account)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Selectors\nimport { appHistorySelector, } from '../../../selectors/appSelectors'\nimport { isNavbarOpen, } from '../../../selectors/uiSelectors'\n\n// Components\nimport NavbarDropdownItem from '../NavbarDropdownItem'\nimport NavbarDropdown from '../NavbarDropdown'\n\n\nconst NavHistory = () => {\n\n // Selectors\n const appHistory = useSelector(appHistorySelector)\n const showAppHistory = useMemo(() => (Array.isArray(appHistory) && appHistory.length), [ appHistory, ])\n const navbarOpen = useSelector(isNavbarOpen)\n\n // UI Callbacks\n const historyItemStyle = useMemo(() => ({ padding: '0.1em 0.5em', fontSize: '0.95rem', }), [])\n const dropdownMenuStyle = useMemo(() => ({ minWidth: '13.5rem', padding: '0.5em 0', }), [])\n\n const navbarText = useMemo(() => {\n let text = [\n ,\n ]\n if (navbarOpen) {\n text.push(Page History)\n }\n return text\n }, [ navbarOpen, ])\n\n if (!showAppHistory) {\n return null\n }\n\n const markup = \n {\n appHistory.map((histItem, idx) => {\n const route = histItem.route || histItem\n const title = histItem.title || route\n return \n {title}\n \n })\n }\n \n return markup\n}\n\nexport default React.memo(NavHistory)\n","import React from 'react'\nimport { Nav, } from 'reactstrap'\n\n// Components\nimport Help from './Help'\nimport Account from './Account'\nimport NavHistory from './NavHistory'\n\n\nconst RightNavbarItems = () => {\n return \n}\n\nexport default React.memo(RightNavbarItems)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\nimport { Navbar, Container, } from 'reactstrap'\n\n// Selectors\nimport { isNavbarOpen, } from '../../selectors/uiSelectors'\n\n// Components\nimport Banner from './Banner'\nimport LeftNavbarItems from './Left'\nimport RightNavbarItems from './Right'\n\n\nconst DNRNavbar = () => {\n const navbarIsOpen = useSelector(isNavbarOpen)\n const navbarCssClasses = useMemo(() => {\n let classes = 'navbar-collapse offcanvas-collapse'\n if (navbarIsOpen) {\n classes += ' open'\n }\n return classes\n }, [ navbarIsOpen, ])\n return <>\n \n \n \n \n \n \n \n \n}\n\nexport default React.memo(DNRNavbar)\n","// Libraries\nimport React from 'react'\nimport { string, object, PropTypes, } from 'prop-types'\n\n// Utilities\nimport { dateFormatter, } from '../utilities'\n\nconst TITLE_DATE_FORMAT = 'dddd, MMMM D YYYY, h:mm:ss a'\nconst VISIBLE_DATE_FORMAT = 'MM/DD/YYYY'\n\nconst AuditRow = ({ Label, AuditBy, AuditDate, }) => {\n if (!AuditBy && !AuditDate) {\n return null\n }\n\n let markup = []\n if (AuditBy) {\n markup.push(`${Label} by ${AuditBy}`)\n }\n if (AuditDate) {\n const auditDate = dateFormatter(AuditDate)\n return {markup[0]} {auditDate.fromNow()} on {auditDate.format(VISIBLE_DATE_FORMAT)}\n }\n return {markup[0]}\n}\n\nAuditRow.propTypes = {\n Label : string,\n AuditBy : string,\n AuditDate : PropTypes.oneOfType([ string, object, ]),\n}\n \nconst AuditData = ({ CreateBy, CreateDate, UpdateBy, UpdateDate, className, style, }) => {\n return
\n \n \n
\n}\n\nAuditData.propTypes = {\n CreateBy : string,\n CreateDate : PropTypes.oneOfType([ string, object, ]),\n UpdateBy : string,\n UpdateDate : PropTypes.oneOfType([ string, object, ]),\n className : string,\n style : object,\n}\n\nAuditData.defaultProps = {\n style: {},\n}\n\nexport default AuditData","import React from 'react'\nimport { bool, func, string, } from 'prop-types'\n\nexport default class Dropzone extends React.Component {\n constructor (props) {\n super(props)\n\n this.fileInputRef = React.createRef()\n \n this.validFileExtensions = props.validFileExtensions || this.validFileExtensions\n }\n\n static propTypes = {\n disabled : bool,\n onFilesAdded : func,\n validFileExtensions : string,\n multiple : bool,\n }\n\n validFileExtensions = '.pdf,.jpg,.doc,.docx,.xls,.xlsx,.kml,.kmz,.msg,.zip'\n\n state = {\n hightlight: false,\n }\n\n onDragOver = (evt) => {\n evt.preventDefault()\n \n if (this.props.disabled) {\n return\n }\n \n this.setState({ hightlight: true, })\n }\n\n onDragLeave = () => {\n this.setState({ hightlight: false, })\n }\n\n onDrop = (evt) => {\n evt.preventDefault()\n \n if (this.props.disabled) {\n return\n }\n\n this.setState({ error: '', hightlight: false, })\n\n const files = evt.dataTransfer.files\n if (typeof this.props.onFilesAdded === 'function') {\n const array = this.fileListToArray(files)\n this.props.onFilesAdded(array)\n }\n }\n\n openFileDialog = () => {\n if (this.props.disabled) {\n return\n }\n\n this.setState({ error: '', files: [], })\n this.fileInputRef.current.value = '' // Ensure there is no value set in case they try to choose the same file again\n this.fileInputRef.current.click()\n }\n\n onFilesAdded = (evt) => {\n if (this.props.disabled) {\n return\n }\n\n const files = evt.target.files\n if (typeof this.props.onFilesAdded === 'function') {\n const array = this.fileListToArray(files)\n this.props.onFilesAdded(array)\n }\n }\n\n fileListToArray = (list) => {\n let array = []\n const validExts = (this.validFileExtensions).split(',')\n for (var i = 0; i < list.length; i++) {\n const file = list.item(i)\n const fileExt = file.name.substring(file.name.lastIndexOf('.'))\n if (validExts.map(x => x.toLowerCase()).includes(fileExt.toLowerCase()) === false) {\n this.setState({ error: `The file type ${fileExt} is not allowed. Only the following are allowed: ${validExts.join(', ')}.`, })\n array = []\n break\n }\n array.push(file)\n }\n return array\n }\n\n render () {\n const { disabled, multiple, } = this.props\n const dropZoneClass = `dropzone${disabled ? ' disabled' : ''}`\n const dropZoneLabel = `Upload File${multiple ? 's' : ''}`\n return \n \n \n {dropZoneLabel}\n {\n this.state.error &&
{this.state.error}
\n }\n \n }\n}","import React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Row, Col, Button, Card, CardHeader, CardBody, } from 'reactstrap'\r\nimport { string, func, bool, } from 'prop-types'\r\n\r\nimport FileActions from '../../redux/FileRedux'\r\nimport Dropzone from './Dropzone'\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\nclass Upload extends React.Component {\r\n\r\n static propTypes = {\r\n online : bool,\r\n title : string,\r\n uploadFiles : func,\r\n successfulUpload : bool,\r\n uploading : bool,\r\n validFileExtensions : string,\r\n multiple : bool,\r\n ResetFileUploading : func,\r\n onFileSelected : func,\r\n readOnly : bool,\r\n }\r\n\r\n state = {\r\n files: [],\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.ResetFileUploading()\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.successfulUpload && !this.props.successfulUpload) {\r\n this.setState({ files: [], })\r\n }\r\n }\r\n\r\n onFilesAdded = (files) => {\r\n if (this.props.multiple) {\r\n files = [ ...this.state.files, ...files, ]\r\n }\r\n if (typeof this.props.onFileSelected === 'function') {\r\n this.props.onFileSelected(files)\r\n }\r\n this.setState({ files, })\r\n }\r\n\r\n clearFiles = (evt) => {\r\n evt.preventDefault()\r\n\r\n this.setState({ files: [], })\r\n }\r\n\r\n uploadFiles = evt => {\r\n stopEvent(evt)\r\n\r\n if (this.props.online && this.state.files.length) {\r\n this.props.uploadFiles(this.state.files)\r\n }\r\n }\r\n\r\n render () {\r\n const { title, uploading, validFileExtensions, multiple, online, readOnly, } = this.props\r\n const { files, } = this.state\r\n return (\r\n \r\n {title || `Upload File${multiple ? 's' : ''}`}\r\n \r\n \r\n \r\n \r\n {\r\n files.length\r\n ? <>\r\n
{`File${multiple ? 's' : ''}`}
\r\n {\r\n files.map(file => {\r\n return (\r\n \r\n \r\n {file.name} - {((file.size / 1024) / 1024).toFixed(2)}MB\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n : null\r\n }\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n ...state.Files,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ResetFileUploading: FileActions.resetFileUploading,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Upload)","import Upload from './Upload'\nexport default Upload","import React from 'react'\nimport { Alert, } from 'reactstrap'\n\n\nconst ForestHealthDocAlert = () => {\n return \n

\n You must upload a document that further outlines why this application qualifies for a Forest Health Exemption\n in the Documents section and set the Document Type to Forest Health Burn Documentation.\n

\n

\n Documentation must include a brief description of the alternatives to burning that could \n achieve the desired objective and why those alternatives are not appropriate for the situation.\n

\n
\n}\n\nexport default ForestHealthDocAlert","import React from 'react'\nimport { Alert, } from 'reactstrap'\n\n\nconst PileLocationDocAlert = () => {\n return \n

\n You must upload a document that includes a map of the approximate location(s) of your pile(s)\n in the Documents section and set the Document Type to Pile Location Map.\n

\n
\n}\n\nexport default PileLocationDocAlert","import React from 'react'\nimport { string, } from 'prop-types'\nimport { ErrorMessage, useFormikContext, } from 'formik'\nimport { FormFeedback, } from 'reactstrap'\n\nconst FormError = (props) => {\n const {\n fieldName,\n } = props\n const formik = useFormikContext()\n if (!fieldName || !formik) {\n return null\n }\n const error = formik.errors[`${fieldName}Id`]\n return <>\n \n \n \n}\n\nFormError.propTypes = {\n fieldName: string,\n}\n\nexport default React.memo(FormError)\n","import { useCallback, useEffect, } from 'react'\nimport BurnRequestSearchActions from '../../redux/BurnRequestSearchRedux'\nimport BurnPermitSearchActions from '../../redux/BurnPermitSearchRedux'\nimport SearchActions from '../../redux/SearchRedux'\nimport PersonActions from '../../redux/PersonRedux'\nimport { dateFormatter, } from '../../utilities'\n\nexport function useInputChange (dispatch) {\n const dispatchInputChange = useCallback((newValues) => {\n dispatch({ type: 'INPUT_CHANGE', payload: newValues, })\n }, [ dispatch, ])\n\n /**\n * Generic change handler\n * @param {Object} Change Event \n */\n const onTextChange = useCallback(evt => {\n const { name, type, step, } = evt.target\n let { value, } = evt.target\n if (!!value && (type === 'number' || type === 'select-one')) {\n if (step && step.indexOf('.') > -1) {\n value = parseFloat(value)\n }\n else {\n value = parseInt(value)\n }\n }\n dispatchInputChange({ [name]: value, })\n }, [ dispatchInputChange, ])\n \n\n const onSelect = useCallback(evt => {\n const { name, } = evt.target\n let { value, } = evt.target\n const resultName = name.substring(0, name.indexOf('Id'))\n let resultValue = ''\n if (value) {\n resultValue = [ ...evt.target.options, ].filter(o => o.value === value)[0].text\n value = parseInt(value)\n }\n dispatchInputChange({ [name]: value, [resultName]: resultValue, })\n }, [ dispatchInputChange, ])\n\n return [ dispatchInputChange, onTextChange, onSelect, ]\n}\n\n\nexport function usePermitSearchActions (reduxDispatch, resetCallback) {\n /**\n * Show/hide map handler\n */\n const onToggleMap = useCallback(() => {\n reduxDispatch(BurnPermitSearchActions.toggleSearchMap())\n }, [ reduxDispatch, ])\n \n const toggleLocation = useCallback(() => {\n reduxDispatch(BurnPermitSearchActions.toggleLocation())\n }, [ reduxDispatch, ])\n\n /**\n * Reset button handler, reset redux with default search values\n */\n const onResetClick = useCallback(() => {\n if (resetCallback) {\n resetCallback()\n }\n reduxDispatch(BurnPermitSearchActions.resetSearchParams())\n }, [ reduxDispatch, resetCallback, ])\n\n return [ onToggleMap, toggleLocation, onResetClick, ]\n}\n\n\nexport function useAutoSelectChange (dispatchInputChange, lookupToSearch, { textKey, valueKey, }) {\n const autoSelectSelected = useCallback(value => {\n const id = (lookupToSearch.find(u => u.Text === value) || {}).Value || ''\n dispatchInputChange({ [textKey]: value, [valueKey]: id, })\n }, [ dispatchInputChange, lookupToSearch, textKey, valueKey, ])\n\n const autoSelectChanged = useCallback(evt => {\n const { value, } = evt.target\n autoSelectSelected(value)\n }, [ autoSelectSelected, ])\n return [ autoSelectSelected, autoSelectChanged, ]\n}\n\n\nexport function useSearchLookupsFetch (reduxDispatch, canSearchByAssignee) {\n useEffect(() => {\n if (reduxDispatch) {\n reduxDispatch(SearchActions.getSearchLookupData())\n if (canSearchByAssignee) {\n reduxDispatch(PersonActions.getAssignableUsers())\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n\nexport function useEnterPressHandler (callback) {\n const handleKeyPress = useCallback((evt) => {\n if (evt.charCode === 13) {\n callback()\n }\n }, [ callback, ])\n return handleKeyPress\n}\n\nexport function useSearchDateClick (dispatchInputChange, startKey, endKey) {\n const onDateClick = useCallback(({ from, to, }) => {\n let start = '', end = ''\n if (from) {\n start = dateFormatter(from, 'YYYY-MM-DD')\n }\n if (to) {\n end = dateFormatter(to, 'YYYY-MM-DD')\n }\n dispatchInputChange({ [startKey]: start, [endKey]: end, })\n }, [ dispatchInputChange, endKey, startKey, ])\n return onDateClick\n}\n\nexport function useRequestSearchActions (reduxDispatch, resetCallback) {\n /**\n * Show/hide map handler\n */\n const onToggleMap = useCallback(() => {\n reduxDispatch(BurnRequestSearchActions.toggleRequestSearchMap())\n }, [ reduxDispatch, ])\n\n const toggleLocation = useCallback(() => {\n reduxDispatch(BurnRequestSearchActions.toggleRequestLocation())\n }, [ reduxDispatch, ])\n\n /**\n * Reset button handler, reset redux with default search values\n */\n const onResetClick = useCallback(() => {\n if (resetCallback) {\n resetCallback()\n }\n reduxDispatch(BurnRequestSearchActions.resetRequestSearchParams())\n }, [ reduxDispatch, resetCallback, ])\n\n return [ onToggleMap, toggleLocation, onResetClick, ]\n}\n\nexport const useAutoComplete = (name, evtCallback, optProps) => {\n optProps = optProps || { textKey: 'Text', valueKey: 'Value', }\n const { textKey, valueKey, } = optProps\n\n const onChange = useCallback(evt => {\n const { label, value, } = evt\n if (typeof evtCallback === 'function') {\n evtCallback({ target: { name, value: label, id: value, }, })\n }\n return { [textKey]: label, [valueKey]: value, }\n }, [ textKey, valueKey, name, evtCallback, ])\n return [ onChange, ]\n}\n","import React from 'react'\n\n\nconst RequiredIndicator = () => {\n return *
\n}\n\nexport default React.memo(RequiredIndicator)\n","// Libraries\nimport React, { useCallback, useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\nimport { Label, } from 'reactstrap'\nimport { bool, func, string, } from 'prop-types'\nimport { useFormikContext, } from 'formik'\n\n// Components\nimport { AutoComplete, } from './'\nimport FormError from './FormError'\n\n// Hooks\nimport { useAutoComplete, } from '../Search/hooks'\n\n// Selectors\nimport { getDnrUsersForSelect, } from '../../selectors/selectors'\n\n// Icons\nimport RequiredIndicator from '../Icons/RequiredIndicator'\n\n\nconst AssignedStaff = (props) => {\n const {\n fieldName,\n labelClassName,\n required,\n } = props\n\n let {\n onChange,\n value,\n } = props\n let setFieldValue\n\n const formik = useFormikContext()\n if (formik) {\n setFieldValue = formik.setFieldValue\n value = {\n label : formik.values[fieldName],\n value : formik.values[`${fieldName}Id`],\n }\n }\n\n const dnrUsers = useSelector(getDnrUsersForSelect)\n\n const users = useMemo(() => {\n return [ { Value: '', Text: 'Unassigned', }, ...dnrUsers, ]\n }, [ dnrUsers, ])\n\n const onAutoComplete = useCallback(e => {\n const { name, id, value, } = e.target\n if (typeof setFieldValue === 'function') {\n setFieldValue(name, value)\n setFieldValue(`${name}Id`, id)\n }\n if (typeof onChange === 'function') {\n onChange({ label: value, value: id, })\n }\n }, [ onChange, setFieldValue, ])\n\n // TODO: this feels wonky to pass a callback through to a hook instead of passing it directly\n const [ assignedStaffChange, ] = useAutoComplete('AssignedTo', onAutoComplete)\n\n let requiredIndicator\n if (required) {\n requiredIndicator = \n }\n\n return <>\n \n \n \n \n}\n\nAssignedStaff.defaultProps = {\n fieldName: 'AssignTo',\n}\n\nAssignedStaff.propTypes = {\n fieldName : string,\n labelClassName : string,\n onChange : func,\n value : string,\n error : string,\n required : bool,\n}\n\nexport default React.memo(AssignedStaff)\n","import { useFormikContext, } from 'formik'\nimport React, { useCallback, } from 'react'\nimport { useSelector, } from 'react-redux'\nimport { Button, } from 'reactstrap'\nimport { func, string, } from 'prop-types'\n\n// Utilities\nimport stopEvent from '../../utilities/stopEvent'\n\n// Selectors\nimport { userPersonModelSelector, } from '../../selectors/userSelectors'\n\n\nconst AssignToMe = (props) => {\n const { fieldName, } = props\n // Selectors\n const currentUserPerson = useSelector(userPersonModelSelector)\n\n // Redux actions\n const formik = useFormikContext()\n\n // UI Callbacks\n const assignToMe = useCallback((e) => {\n stopEvent(e)\n formik.setFieldValue(`${fieldName}`, currentUserPerson.toString())\n formik.setFieldValue(`${fieldName}Id`, currentUserPerson.PersonId)\n }, [ formik, currentUserPerson, fieldName, ])\n\n return Assign to Me\n}\n\nAssignToMe.defaultProps = {\n fieldName: 'AssignedTo',\n}\n\nAssignToMe.propTypes = {\n fieldName : string,\n onClick : func,\n}\n\nexport default React.memo(AssignToMe)\n","// Libraries\nimport React, { useCallback, useMemo, useState, } from 'react'\n// import { FormFeedback, } from 'reactstrap'\nimport { string, array, func, object, bool, number, } from 'prop-types'\nimport ReactSelect from 'react-select'\nimport CreateableSelect from 'react-select/creatable'\nimport { useFormikContext, } from 'formik'\n \nconst AutoComplete = (props) => {\n const {\n autoFocus,\n error,\n fieldName,\n items,\n minCharactersToEnter,\n defaultMenuIsOpen,\n onChange,\n readOnly,\n placeholder,\n createable,\n searchValue,\n } = props\n\n let { form, value, } = props\n\n const [ showOptions, ] = useState(true)\n const [ createdOptions, setCreatedOptions, ] = useState([])\n\n const formik = useFormikContext()\n if (!form && formik) {\n form = formik\n }\n\n const options = useMemo(() => {\n if (!showOptions) {\n return []\n }\n return [\n ...createdOptions,\n ...items.map(i => ({ value: i.Value, label: i.Text, })),\n ]\n }, [ showOptions, createdOptions, items, ])\n\n if (!value && form && fieldName) {\n const fieldNameProps = fieldName.split('.')\n let currVal = form.values\n fieldNameProps.forEach(key => {\n currVal = currVal[key]\n })\n value = options.find(o => o.value === currVal)\n if (!value) {\n setCreatedOptions([ ...createdOptions, { value: currVal, label: currVal, }, ])\n }\n }\n else if (typeof value === 'string') {\n value = options.find(o => o.label === value)\n }\n\n const minChars = useMemo(() => {\n if (!`${minCharactersToEnter}`.length) {\n return 1\n }\n return minCharactersToEnter\n }, [ minCharactersToEnter, ])\n\n const _onChange = useCallback((evt, action) => {\n let label = '', value = ''\n if (evt) {\n ({ label, value, } = evt)\n }\n if (typeof onChange === 'function') {\n onChange({ label, value, }, action)\n }\n if (form && typeof form.setFieldValue === 'function') {\n form.setFieldValue(fieldName, value)\n }\n }, [ fieldName, form, onChange, ])\n\n const shouldItemsRender = useCallback((opt, input) => {\n if ((!input || !input.length) && minChars > 0) {\n return false\n }\n if (input.length < minChars) {\n return false\n }\n return opt.data.__isNew__ || (opt.label && opt.label.toLowerCase().includes(input.toLowerCase()))\n }, [ minChars, ])\n\n const components = useMemo(() => ({\n DropdownIndicator : () => null,\n IndicatorSeparator : () => null,\n }), [])\n\n const customStyles = useMemo(() => ({\n option : defaultStyles => ({ ...defaultStyles, }),\n control : defaultStyles => ({\n ...defaultStyles,\n borderTop : 'none',\n borderRight : 'none',\n borderLeft : 'none',\n borderRadius : 'none',\n border : '0rem solid transparent',\n paddingTop : '0.25em',\n }),\n singleValue: defaultStyles => ({ ...defaultStyles, }),\n }), [])\n\n const noOptionsMessage = useCallback(({ inputValue, }) => {\n if (minCharactersToEnter === 0) {\n return 'No matches'\n }\n const remainingValLen = minCharactersToEnter - inputValue.length\n return inputValue && remainingValLen <= 0\n ? 'No matches'\n : `Enter ${remainingValLen} more character${remainingValLen > 1 ? 's' : ''} to see matches`\n }, [ minCharactersToEnter, ])\n\n const className = useMemo(() => (error ? 'is-invalid' : ''), [ error, ])\n const compProps = {\n autoFocus : autoFocus,\n className : className,\n classNamePrefix : 'react-select',\n defaultValue : value,\n defaultInputValue : searchValue || '',\n defaultMenuIsOpen : defaultMenuIsOpen,\n isClearable : true,\n isSearchable : true,\n name : fieldName,\n options : options,\n onChange : _onChange,\n filterOption : shouldItemsRender,\n components : components,\n styles : customStyles,\n placeholder : placeholder,\n noOptionsMessage : noOptionsMessage,\n readOnly : readOnly,\n value : value || '',\n }\n\n if (createable) {\n return \n }\n\n return \n}\n\nAutoComplete.propTypes = {\n items : array.isRequired,\n fieldName : string,\n value : string,\n searchValue : string,\n onChange : func,\n form : object,\n error : string,\n invalid : bool,\n autoFocus : bool,\n shouldFocus : bool,\n readOnly : bool,\n defaultMenuIsOpen : bool,\n minCharactersToEnter : number,\n placeholder : string,\n createable : bool,\n}\n\nAutoComplete.defaultProps = {\n fieldName : '',\n value : '',\n autoFocus : false,\n shouldFocus : false,\n readOnly : false,\n defaultMenuIsOpen : false,\n minCharactersToEnter : 1,\n invalid : false,\n placeholder : '',\n createable : false,\n}\n\nexport default React.memo(AutoComplete)\n","import React from 'react'\nimport { Button, } from 'reactstrap'\nimport { string, func, bool, } from 'prop-types'\n\nconst ButtonGroupButton = props => {\n const {\n onClick,\n text,\n isActive,\n color,\n readOnly,\n size,\n } = props\n\n return \n {text}\n \n}\n\nButtonGroupButton.propTypes = {\n onClick : func,\n text : string,\n isActive : bool,\n color : string,\n size : string,\n readOnly : bool,\n}\n\nButtonGroupButton.defaultProps = {\n color : 'light',\n size : 'sm',\n isActive : false,\n readOnly : false,\n}\n\nexport default React.memo(ButtonGroupButton)","import React from 'react'\r\nimport { Button, } from 'reactstrap'\r\nimport { string, func, } from 'prop-types'\r\n\r\nconst CalculateButton = ({ onClick, size, color, buttonText, }) => {\r\n const onCalculateClick = React.useCallback(() => onClick(), [ onClick, ])\r\n return \r\n {buttonText}\r\n \r\n}\r\n\r\nCalculateButton.defaultProps = {\r\n onClick : () => {},\r\n size : 'sm',\r\n color : 'info',\r\n buttonText : 'Calculate',\r\n}\r\n\r\nCalculateButton.propTypes = {\r\n onClick : func,\r\n buttonText : string,\r\n size : string,\r\n color : string,\r\n}\r\n\r\nexport default CalculateButton","import React from 'react'\nimport { Label, } from 'reactstrap'\nimport { array, string, bool, oneOfType, } from 'prop-types'\n\n// Icons\nimport RequiredIndicator from '../Icons/RequiredIndicator'\n\n\nfunction RequiredLabel (props) {\n const {\n children,\n labelFor,\n readOnly,\n className,\n } = props\n return \n { children }\n { !readOnly && }\n \n}\n\nRequiredLabel.defaultProps = {\n className: '',\n}\n\nRequiredLabel.propTypes = {\n labelFor : string,\n children : oneOfType([ string, array, ]),\n readOnly : bool,\n className : string,\n}\n\nexport default React.memo(RequiredLabel)\n","import React from 'react'\r\nimport { FormFeedback, FormGroup, Label, Input, Fade, } from 'reactstrap'\r\nimport { func, bool, string, array, object, } from 'prop-types'\r\nimport RequiredLabel from './RequiredLabel'\r\n\r\nexport class CheckBoxes extends React.Component {\r\n\r\n static propTypes = {\r\n onCheckboxChange : func,\r\n inputName : string,\r\n CheckboxLabel : string,\r\n CheckboxData : array,\r\n CheckedData : array,\r\n CheckboxError : string,\r\n onOtherInputChange : func,\r\n OtherDescription : string,\r\n OtherDescError : string,\r\n OtherInputName : string,\r\n readOnly : bool,\r\n required : bool,\r\n form : object,\r\n className : string,\r\n showSelectAll : bool,\r\n showLegend : bool,\r\n }\r\n\r\n static defaultProps = {\r\n showSelectAll : false,\r\n readOnly : false,\r\n showLegend : true,\r\n }\r\n\r\n onCheckboxChange = evt => {\r\n const { inputName, form, } = this.props\r\n if (typeof this.props.onCheckboxChange === 'function') {\r\n this.props.onCheckboxChange(evt)\r\n }\r\n else if (form && typeof form.setFieldValue === 'function') {\r\n const checkedData = this.getCheckedData()\r\n const value = parseInt(evt.target.value)\r\n let newData = [ ...checkedData, ]\r\n const checkedIdx = newData.indexOf(value)\r\n if (evt.target.checked) {\r\n if (checkedIdx === -1) {\r\n newData.push(value)\r\n }\r\n }\r\n else {\r\n newData.splice(checkedIdx, 1)\r\n }\r\n form.setFieldValue(inputName, newData)\r\n }\r\n }\r\n\r\n getCheckedData = () => {\r\n const { CheckedData, form, inputName, } = this.props\r\n return CheckedData || (form && form.values[inputName]) || []\r\n }\r\n\r\n onSelectAllChanged = (evt) => {\r\n const { inputName, form, CheckboxData, } = this.props\r\n if (form && typeof form.setFieldValue === 'function') {\r\n let newData = []\r\n if (evt.target.checked) {\r\n newData = CheckboxData.map(c => c.Value, [])\r\n }\r\n form.setFieldValue(inputName, newData)\r\n }\r\n else {\r\n this.props.onCheckboxChange(evt)\r\n }\r\n }\r\n\r\n buildCheckboxes (readOnly = false) {\r\n const markup = []\r\n const { inputName, CheckboxData, showSelectAll, } = this.props\r\n const checkedData = this.getCheckedData()\r\n\r\n for (let i = 0, len = CheckboxData.length; i < len; i++) {\r\n const data = CheckboxData[i]\r\n const checked = checkedData.some(c => c === data.Value)\r\n const key = `${inputName}-${data.Value}`\r\n markup.push(\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (CheckboxData.length > 0 && showSelectAll) {\r\n markup.push(
)\r\n markup.push(\r\n \r\n \r\n \r\n )\r\n }\r\n return markup\r\n }\r\n\r\n otherIsChecked = () => {\r\n const {\r\n CheckboxData,\r\n CheckedData,\r\n inputName,\r\n form,\r\n } = this.props\r\n const checkedData = (\r\n (CheckedData && CheckedData.length ? CheckedData : null)\r\n || (form && form.values[inputName] && form.values[inputName].length ? form.values[inputName] : null)\r\n || []\r\n )\r\n return CheckboxData.some(i => i.Text === 'Other' && checkedData.includes(i.Value))\r\n }\r\n\r\n onOtherInputChange = evt => {\r\n const { onOtherInputChange, OtherInputName, form, } = this.props\r\n if (typeof onOtherInputChange === 'function') {\r\n onOtherInputChange(evt)\r\n }\r\n else if (form && typeof form.setFieldValue === 'function') {\r\n form.setFieldValue(OtherInputName, evt.target.value)\r\n }\r\n }\r\n\r\n getLegend = () => {\r\n if (!this.props.showLegend) {\r\n return null\r\n }\r\n const {\r\n inputName,\r\n CheckboxLabel,\r\n readOnly,\r\n } = this.props\r\n return \r\n {\r\n this.props.required\r\n ? {CheckboxLabel}\r\n : \r\n }\r\n { !readOnly && (Check all that apply) }\r\n \r\n }\r\n\r\n render () {\r\n\r\n let otherInput\r\n const {\r\n CheckboxError,\r\n CheckboxData,\r\n CheckedData,\r\n OtherDescription,\r\n OtherDescError,\r\n OtherInputName,\r\n readOnly,\r\n inputName,\r\n form,\r\n } = this.props\r\n const checkedData = (CheckedData || (form && form.values[inputName]) || [])\r\n if (CheckboxData.some(i => i.Text === 'Other' && checkedData.includes(i.Value))) {\r\n const otherDescError = OtherDescError || (form && form.errors[OtherInputName])\r\n const value = OtherDescription || (form && form.values[OtherInputName])\r\n const inputId = `other-input-${OtherInputName}_${(new Date()).getMilliseconds()}`\r\n otherInput = \r\n \r\n \r\n \r\n \r\n {otherDescError}\r\n \r\n \r\n }\r\n const checkboxError = (CheckboxError || (form && form.errors[inputName]))\r\n return
\r\n { this.getLegend() }\r\n \r\n \r\n {checkboxError}\r\n \r\n { this.buildCheckboxes(readOnly) }\r\n \r\n { otherInput }\r\n \r\n
\r\n }\r\n}\r\nexport default CheckBoxes","import React from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Button, } from 'reactstrap'\r\nimport { func, number, bool, string, } from 'prop-types'\r\n\r\nimport BurnPermitFormActions from '../../redux/BurnPermitFormRedux'\r\nimport { permitApplicationDocuments, } from '../../selectors/burnPermitSelectors'\r\n\r\n\r\nconst DownloadAllPermitDocuments = props => {\r\n const isDownloading = useSelector(state => state.BurnPermitForm.isDownloadingFiles)\r\n const documents = useSelector(state => permitApplicationDocuments(state, props.burnPermitId))\r\n const dispatch = useDispatch()\r\n \r\n const onClick = React.useCallback(() => {\r\n dispatch(BurnPermitFormActions.downloadAllFiles(props.burnPermitId))\r\n }, [ dispatch, props.burnPermitId, ])\r\n\r\n return \r\n {props.buttonText}\r\n \r\n}\r\n\r\nDownloadAllPermitDocuments.propTypes = {\r\n burnPermitId : number.isRequired,\r\n color : string,\r\n buttonText : string,\r\n onClick : func,\r\n readOnly : bool,\r\n}\r\n\r\nDownloadAllPermitDocuments.defaultProps = {\r\n burnPermitId : null,\r\n color : 'dark',\r\n buttonText : 'Download All',\r\n onClick : () => {},\r\n readOnly : false,\r\n}\r\n\r\nexport default DownloadAllPermitDocuments","import React, { useCallback, useMemo, useState, } from 'react'\nimport Joyride, { STATUS, } from 'react-joyride'\nimport { array, bool, func, string, } from 'prop-types'\nimport { Button, } from 'reactstrap'\n\n\nconst styles = {\n options: {\n primaryColor: '#172545',\n },\n}\n\nconst FormTour = props => {\n const {\n run,\n steps,\n tourCompleted,\n onFinished,\n } = props\n\n const [ restartTour, setRestartTour, ] = useState(false)\n\n const showTour = useMemo(() => {\n if (restartTour === true) {\n return restartTour\n }\n if (tourCompleted === true) {\n return false\n }\n return run\n }, [ tourCompleted, restartTour, run, ])\n\n const joyrideCallback = useCallback(data => {\n const { status, } = data\n if (typeof onFinished === 'function' && [ STATUS.FINISHED, STATUS.SKIPPED, ].includes(status)) {\n onFinished()\n setRestartTour(false)\n }\n }, [ onFinished, ])\n\n const onHelpClick = useCallback(() => {\n setRestartTour(true)\n }, [])\n\n return <>\n \n Help\n \n \n \n}\n\nFormTour.defaultProps = {\n run : false,\n tourCompleted : false,\n}\n\nFormTour.propTypes = {\n run : bool,\n interactionType : string,\n onFinished : func,\n steps : array,\n tourCompleted : bool,\n}\n\nexport default React.memo(FormTour)\n","import React from 'react'\r\nimport { Field, } from 'formik'\r\nimport { Row, Col, Input, Label, } from 'reactstrap'\r\nimport { string, number, func, object, PropTypes, } from 'prop-types'\r\n\r\n\r\nconst FuelDiameter = props => {\r\n return \r\n \r\n \r\n {props.fuelDiam.FuelDiameterName}\r\n \r\n \r\n \r\n \r\n {({ field, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n}\r\n\r\nFuelDiameter.propTypes = {\r\n fuelDiam : object,\r\n onChange : func,\r\n inputLabelsClass : string,\r\n inputRowsClass : string,\r\n readOnly : PropTypes.bool,\r\n value : PropTypes.oneOfType([ number, string, ]),\r\n}\r\n\r\nFuelDiameter.defaultProps = {\r\n fuelDiam : {},\r\n onChange : () => {},\r\n inputLabelsClass : '',\r\n inputRowsClass : '',\r\n value : '',\r\n}\r\n\r\nexport default FuelDiameter","import React from 'react'\r\nimport { Row, } from 'reactstrap'\r\nimport { string, func, array, bool, } from 'prop-types'\r\n\r\nimport FuelDiameter from './FuelDiameter'\r\nimport { useSelector, } from 'react-redux'\r\nimport { fuelDiametersSelector, } from '../../selectors/selectors'\r\n\r\n\r\nconst FuelDiameters = props => {\r\n const {\r\n BurnPermitFuelLoadingXref,\r\n inputLabelsClass,\r\n inputRowsClass,\r\n onChange,\r\n readOnly,\r\n } = props\r\n\r\n const FuelDiams = useSelector(fuelDiametersSelector)\r\n \r\n const markup = []\r\n \r\n const fuelDiamCats = [ ...new Set(FuelDiams.map(d => d.FuelDiameterCategory)), ]\r\n \r\n // loop diam cats, filter fueldiams by current cat\r\n for (let i = 0, len = fuelDiamCats.length; i < len; i++) {\r\n const fuelDiamCat = fuelDiamCats[i]\r\n // push cat node to array\r\n markup.push(\r\n \r\n {fuelDiamCat}\r\n \r\n )\r\n const fuelDiams = FuelDiams.filter(d => d.FuelDiameterCategory === fuelDiamCat)\r\n for (let j = 0, jLen = fuelDiams.length; j < jLen; j++) {\r\n const fuelDiam = fuelDiams[j]\r\n // set diam value from state\r\n const setFuelDiam = BurnPermitFuelLoadingXref.find(f => f.FuelDiameterId === fuelDiam.FuelDiameterId)\r\n const tonsPerAcre = setFuelDiam ? setFuelDiam.TonsPerAcre : ''\r\n // push diam nodes to array\r\n markup.push()\r\n }\r\n }\r\n return markup\r\n}\r\n\r\nFuelDiameters.propTypes = {\r\n BurnPermitFuelLoadingXref : array,\r\n onChange : func,\r\n inputLabelsClass : string,\r\n inputRowsClass : string,\r\n readOnly : bool,\r\n}\r\n\r\nFuelDiameters.defaultProps = {\r\n BurnPermitFuelLoadingXref : [],\r\n onChange : () => {},\r\n inputLabelsClass : '',\r\n inputRowsClass : '',\r\n}\r\n\r\nexport default FuelDiameters","import React from 'react'\nimport { FormGroup, Col, Label, Input, } from 'reactstrap'\nimport { func, string, bool, array, number, object, PropTypes, } from 'prop-types'\nimport RequiredLabel from './RequiredLabel'\n\n\nexport function RadioInputs (props) {\n const {\n values,\n label,\n inputName,\n onChange,\n readOnly,\n checkedValue,\n invalid,\n errorMessage,\n showPrompt,\n required,\n className,\n } = props\n return \n
\n \n {\n required && !readOnly \n ? {label}\n : \n }\n \n { !readOnly && showPrompt && (Choose only one) }\n {invalid &&
{errorMessage}
}\n {\n values.map(v => {\n const key = `radio-input-${v.Value}`\n return \n \n \n })\n }\n
\n \n}\n\nRadioInputs.propTypes = {\n inputName : string,\n onChange : func,\n checkedValue : PropTypes.oneOfType([ string, number, ]),\n readOnly : bool,\n invalid : bool,\n errorMessage : string,\n label : PropTypes.oneOfType([ string, object, ]),\n values : array.isRequired,\n required : bool,\n showPrompt : bool,\n className : string,\n}\n\nRadioInputs.defaultProps = {\n readOnly : false,\n inputName : null,\n onChange : () => {},\n checkedValue : null,\n invalid : false,\n errorMessage : '',\n showPrompt : true,\n className : 'pl-5 mb-1',\n}\n\nexport default RadioInputs","import React from 'react'\nimport { func, bool, string, object, } from 'prop-types'\n\nconst RowToggler = ({ onClick, show, rowLabel, rowClass, style, }) => {\n return
\n \n {show ? 'Hide' : 'Show'} {rowLabel}\n
\n}\n\nRowToggler.propTypes = {\n onClick : func.isRequired,\n show : bool.isRequired,\n rowLabel : string.isRequired,\n rowClass : string,\n style : object,\n}\n\nRowToggler.defaultProps = {\n show : false,\n rowClass : '',\n}\n\nexport default RowToggler","import React from 'react'\nimport { FormGroup, Input, Label, FormFeedback, } from 'reactstrap'\nimport { PropTypes, number, string, array, func, bool, object, } from 'prop-types'\nimport { objHasProp, } from '../../utilities'\nimport { RequiredLabel, } from '.'\n\n/**\n * Builds a ` 0}\n readOnly={readOnly}\n disabled={readOnly}\n className={errorMessage.length ? 'is-invalid': ''}\n {...(dataset)}\n >\n {this.buildOptions()}\n \n {errorMessage}\n \n )\n }\n}","// Libraries\nimport React from 'react'\nimport { debounce, } from 'lodash'\nimport { Input, Button, ButtonGroup, } from 'reactstrap'\nimport { string, func, object, bool, } from 'prop-types'\n\n// Utilities\nimport stopEvent from '../../utilities/stopEvent'\n\n\nconst MilitaryButton = ({ onClick, active, readOnly, children, }) => {\n return {children}\n}\n\nMilitaryButton.propTypes = {\n onClick : func.isRequired,\n active : bool.isRequired,\n readOnly : bool,\n children : string,\n}\n\nexport default class TimePicker extends React.Component{\n\n static propTypes = {\n value : string,\n name : string,\n id : string,\n onBlur : func,\n onChange : func.isRequired,\n children : object,\n invalid : bool,\n readOnly : bool,\n format : string,\n }\n\n static defaultProps = {\n format: null,\n }\n\n state = {\n hours : '',\n minutes : '',\n militaryFormat : this.props.format === 'military',\n amPm : 'AM',\n }\n\n componentDidMount () {\n let { value, } = this.props\n if (value && value.length >= 5) {\n if (value.length === 8) {\n // When coming from the server, the string will have seconds attached, which we need to chop\n value = value.substr(0, value.length - 3)\n }\n const [ , , amPm, ] = this.parseValue(value)\n this.setState({ amPm, }, this.toggleMilitary)\n }\n this._isMounted = true\n this.updateButtonOrientation()\n window.addEventListener('resize', debounce(this.updateButtonOrientation, 250))\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.value !== this.props.value) {\n this.parseForDisplay()\n }\n }\n\n componentWillUnmount () {\n this._isMounted = false\n window.removeEventListener('resize', debounce(this.updateButtonOrientation, 250))\n }\n\n updateButtonOrientation = () => {\n if (!this._isMounted) {\n return\n }\n var isMidWidth = window.innerWidth < 1200 && window.innerWidth > 990 \n var isMobile = window.innerWidth < 768\n if (isMidWidth || isMobile) {\n this.setState({ verticalbuttons: true, })\n }\n else if (this.state.verticalbuttons) {\n this.setState({ verticalbuttons: false, })\n }\n }\n\n /***\n * Parses the string representation of the time span into individual values for hours and minutes,\n * then calls the onChange prop.\n *\n * @param {string} inputValue - Example '23:15'\n */\n parseValue = inputValue => {\n if (!inputValue) {\n return [ '', '', this.state.amPm, ]\n }\n const matches = inputValue.split(':')\n let hours = parseInt(matches[0] || '00')\n let minutes = parseInt(matches[1] || '00')\n let { amPm, } = this.state\n if (hours >= 12) {\n amPm = 'PM'\n }\n if (minutes < 10) {\n minutes = `${0}${minutes}`\n }\n if (this.state.militaryFormat && amPm === 'PM' && hours < 12) {\n hours += 12\n }\n return [ hours, minutes, amPm, ]\n }\n\n /***\n * Handler for changing the input value for hours\n *\n * @param {Object} e - Change event\n */\n onChangeHours = e => {\n stopEvent(e)\n\n let hours = parseInt(e.target.value)\n const { amPm, militaryFormat, } = this.state\n if (amPm === 'PM' && !militaryFormat && hours < 12) {\n hours += 12\n }\n else if (amPm === 'AM' && !militaryFormat && hours > 12) {\n hours -= 12\n }\n const [ , minutes, ] = this.parseValue(this.props.value)\n this.props.onChange(`${hours}:${minutes || '00'}`)\n if (militaryFormat && hours < 12) {\n this.setState({ amPm: 'AM', })\n }\n }\n\n /***\n * Handler for changing the input value for minutes\n *\n * @param {Object} e - Change event\n */\n onChangeMinutes = e => {\n stopEvent(e)\n\n let { value, } = e.target\n value = parseInt(value)\n const [ hours, ] = this.parseValue(this.props.value)\n if (value < 10) {\n value = `${0}${value}`\n }\n this.props.onChange(`${hours || '00' }:${value}`)\n }\n\n /***\n * Allows user to toggle between AM and PM for the time entered\n *\n * @param {Object} e - Click event\n */\n onAmPmClick = e => {\n stopEvent(e)\n \n if (this.props.readOnly) {\n return\n }\n\n let { amPm, } = this.state\n let [ hours, minutes, ] = this.parseValue(this.props.value)\n if (amPm === 'AM') {\n amPm = 'PM'\n if (hours < 12) {\n hours += 12\n }\n }\n else if (amPm === 'PM') {\n amPm = 'AM'\n hours = hours > 12 ? hours - 12 : hours\n }\n\n this.setState({ amPm, }, () => {\n this.props.onChange(`${hours}:${minutes}`)\n })\n }\n\n /***\n * Switches UI representation between 12hr and 24hr\n *\n * @param {Object} e - Click event\n * @param {boolean} militaryOn - Should use 24hr format\n */\n toggleMilitary = (e, militaryFormat = false) => {\n if (e) {\n stopEvent(e)\n militaryFormat = e.target.innerText === '24'\n }\n\n this.setState({ militaryFormat, }, () => {\n this.parseForDisplay()\n })\n }\n\n parseForDisplay = () => {\n const { amPm, militaryFormat, } = this.state\n let [ hours, minutes, ] = this.parseValue(this.props.value)\n if (!militaryFormat && amPm === 'PM' && hours > 12) {\n hours -= 12\n }\n this.setState({ hours, minutes, })\n }\n\n render () {\n const { readOnly, } = this.props\n const { militaryFormat, amPm, hours, minutes, } = this.state\n const cursor = `${readOnly || militaryFormat ? '' : 'pointer'}`\n return <>\n
\n
\n \n :\n \n \n { militaryFormat ? '' : amPm }\n \n
\n {\n !this.props.format &&\n \n 12\n 24\n \n }\n
\n { this.props.children }\n \n }\n}","import React, { useMemo, } from 'react'\nimport { FormFeedback, } from 'reactstrap'\nimport { Field, ErrorMessage, getIn, } from 'formik'\nimport { object, string, bool, func, number, oneOfType, } from 'prop-types'\n\nconst ValidatingField = (props) => {\n const {\n type,\n field,\n form,\n readOnly,\n onChange,\n min,\n max,\n onBlur,\n className,\n id,\n step,\n placeholder,\n } = props\n const isInvalid = useMemo(() => (!!getIn(form.errors, field.name)), [ form.errors, field.name, ])\n const inputClassName = useMemo(() => (`form-control${isInvalid ? ' is-invalid' : ''} ${className ? className : ''}`), [ isInvalid, className, ])\n const newProps = useMemo(() => {\n const _fieldProps = {\n ...field,\n min,\n max,\n placeholder,\n readOnly,\n step,\n type,\n id : id || field.name,\n invalid : isInvalid.toString(),\n className : inputClassName,\n }\n _fieldProps.value = _fieldProps.value !== null || _fieldProps.value !== undefined ? _fieldProps.value : ''\n\n if (type === 'textarea') {\n _fieldProps.component = type\n }\n if (typeof onChange === 'function') {\n _fieldProps.onChange = onChange\n }\n if (typeof onBlur === 'function') {\n _fieldProps.onBlur = onBlur\n }\n\n return _fieldProps\n }, [ field, id, inputClassName, isInvalid, max, min, onBlur, onChange, placeholder, readOnly, step, type, ])\n return <>\n \n \n \n}\n\nValidatingField.propTypes = {\n field : object,\n form : object,\n type : string,\n readOnly : bool,\n onChange : func,\n step : number,\n placeholder : oneOfType([ number, string, ]),\n min : oneOfType([ number, string, ]),\n max : oneOfType([ number, string, ]),\n onBlur : func,\n className : string,\n id : string,\n}\n\nValidatingField.defaultProps = {\n field : {},\n form : {},\n type : 'text',\n readOnly : false,\n className : null,\n}\n\nexport default React.memo(ValidatingField)\n","import React, { useCallback, useMemo, } from 'react'\nimport { ButtonGroup, FormFeedback, } from 'reactstrap'\nimport { ErrorMessage, useFormikContext, } from 'formik'\nimport { bool, element, oneOfType, string, } from 'prop-types'\n\nimport ButtonGroupButton from './ButtonGroupButton'\n\n\nconst YesNoButton = props => {\n const { name, text, value, readOnly, } = props\n const { setFieldValue, values, } = useFormikContext()\n const onClick = useCallback(() => {\n if (readOnly) {\n return null\n }\n setFieldValue(name, value, true)\n }, [ setFieldValue, name, value, readOnly, ])\n\n const isActive = useMemo(() => (values[name] === value), [ values, value, name, ])\n\n return \n}\n\nYesNoButton.propTypes = {\n name : string,\n readOnly : bool,\n text : string,\n value : bool,\n}\n\n\nconst YesNoButtonGroup = props => {\n const { name, children, readOnly, } = props\n // State and refs\n const { errors, } = useFormikContext()\n\n // UI Callbacks\n const error = useMemo(() => (errors[name] !== undefined && errors[name] !== null), [ errors, name, ])\n const hiddenElClass = useMemo(() => (`form-control${(error ? ' is-invalid' : '')}`), [ error, ])\n\n // mount effect\n const markup = <>\n {children}\n \n \n {errorMessage => {errorMessage}}\n \n \n \n \n \n \n return markup\n}\n\nYesNoButtonGroup.defaultProps = {\n readOnly: false,\n}\n\nYesNoButtonGroup.propTypes = {\n name : string,\n children : oneOfType([ element, string, ]),\n readOnly : bool,\n}\n\nexport default React.memo(YesNoButtonGroup)\n","import React from 'react'\r\nimport { FormGroup, Col, Label, Input, } from 'reactstrap'\r\nimport { func, string, bool, object, PropTypes, } from 'prop-types'\r\n\r\nfunction YesNoRadioButtonGroup ({ inputName, onChange, readOnly, checkedValue, invalid, errorMessage, legend, ariaLabel, }) {\r\n const id = `${inputName}_${(new Date()).getMilliseconds()}`\r\n return \r\n { (invalid || !!errorMessage) &&
{errorMessage}
}\r\n
\r\n { legend && {legend} }\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n}\r\n\r\nYesNoRadioButtonGroup.propTypes = {\r\n inputName : string,\r\n onChange : func,\r\n checkedValue : PropTypes.oneOfType([ string, bool, ]),\r\n readOnly : bool,\r\n invalid : bool,\r\n errorMessage : string,\r\n legend : PropTypes.oneOfType([ string, object, ]),\r\n ariaLabel : string,\r\n}\r\n\r\nYesNoRadioButtonGroup.defaultProps = {\r\n readOnly : false,\r\n inputName : null,\r\n onChange : null,\r\n checkedValue : null,\r\n invalid : false,\r\n errorMessage : '',\r\n}\r\n\r\nexport default YesNoRadioButtonGroup","import React from 'react'\nimport { Alert, } from 'reactstrap'\nimport { CalculateButton, } from '../FormControls'\n\n\nconst TonnageCalculationDocAlert = () => {\n return \n

\n Before signing this application you must either:\n

\n
    \n
  • click the in the Pile Groups section
  • \n
  • upload your tonnage calculator results in the Documents section and set the Document Type to Tonnage Calculations.
  • \n
\n
\n}\n\nexport default TonnageCalculationDocAlert","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Navigate, } from 'react-router-dom'\nimport { Button, Modal, ModalBody, ModalHeader, ModalFooter, Spinner, } from 'reactstrap'\nimport { string, func, object, array, bool, PropTypes, } from 'prop-types'\n\n// Reducers\nimport UiActions from '../redux/UiRedux'\n\n// Utilities\nimport stopEvent from '../utilities/stopEvent'\n\nclass ConfirmationModal extends React.Component {\n static propTypes = {\n loadingComplete : bool,\n modalBody : PropTypes.oneOfType([ string, object, ]),\n modalKey : string,\n modalTitle : string,\n redirectUrl : string,\n disableSubmit : bool,\n disableButtons : bool,\n submitActionLabel : string,\n submitAction : func,\n submitArgs : array,\n successCallback : func,\n openModalKey : string,\n closeModal : func,\n cancelAction : func,\n cancelActionLabel : string,\n showModal : bool,\n showSpinner : bool,\n }\n\n static defaultProps = {\n disableSubmit : false,\n submitActionLabel : 'Submit',\n cancelActionLabel : 'Cancel',\n submitArgs : [],\n }\n \n componentDidUpdate (prevProps) {\n if (prevProps.loadingComplete === false && this.props.loadingComplete === true) {\n this.props.successCallback()\n this.handleClose()\n }\n }\n\n handleClose = () => {\n const { closeModal, cancelAction, showModal, } = this.props\n if (showModal) {\n closeModal()\n }\n if (typeof cancelAction === 'function') {\n cancelAction()\n }\n }\n\n toggle = evt => {\n stopEvent(evt)\n\n if (this.props.showModal) {\n this.handleClose()\n }\n }\n\n handleSubmit = evt => {\n stopEvent(evt)\n\n if (this.props.showModal) {\n const success = this.props.submitAction(...this.props.submitArgs)\n if (success) {\n this.toggle()\n }\n }\n }\n \n render () {\n if (this.props.loadingComplete) {\n return \n }\n const {\n modalTitle,\n modalBody,\n showModal,\n modalKey,\n openModalKey,\n disableSubmit,\n disableButtons,\n submitActionLabel,\n cancelActionLabel,\n } = this.props\n const isOpen = showModal && (openModalKey ? modalKey === openModalKey : true)\n return \n {modalTitle}\n \n {modalBody}\n \n \n \n {cancelActionLabel}\n \n
\n { this.props.showSpinner && }\n \n {submitActionLabel}\n \n
\n
\n
\n }\n}\n \nfunction mapStateToProps (state, props) {\n const { showModal, modalKey, } = state.ui.Modal\n return {\n showModal : showModal || props.showModal,\n openModalKey : modalKey,\n }\n}\n\nconst mapDispatchToProps = {\n closeModal: UiActions.closeModal,\n}\n \nexport default connect(mapStateToProps, mapDispatchToProps)(ConfirmationModal)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { isEmpty, isEqual, } from 'lodash'\r\nimport { array, func, number, bool, string, object, } from 'prop-types'\r\nimport { Row, Col, Card, CardBody, Button, CardText, Label, Badge, } from 'reactstrap'\r\n\r\n// Reducers\r\nimport BurnPermitFormActions from '../../redux/BurnPermitFormRedux'\r\nimport ApiActions from '../../redux/ApiRedux'\r\n\r\n// Components\r\nimport { BurnPermitFormSection, } from '.'\r\nimport AuditData from '../AuditData'\r\nimport Upload from '../Upload'\r\nimport {\r\n ForestHealthDocAlert,\r\n PileLocationDocAlert,\r\n TonnageCalculationDocAlert,\r\n} from '../Alerts'\r\nimport { Select, PopoverButton, DownloadAllPermitDocuments, } from '../FormControls'\r\nimport ConfirmationModal from '../ConfirmationModal'\r\n\r\n// Selectors\r\nimport {\r\n permitApplicationDocuments,\r\n documentTypesForSelect,\r\n documentsSectionIsValid,\r\n permitCanAcceptDocumentUploads,\r\n} from '../../selectors/burnPermitSelectors'\r\nimport { networkStateSelector, } from '../../selectors/selectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n\r\nclass ApplicationDocuments extends React.Component {\r\n \r\n constructor (props) {\r\n super(props)\r\n this.validateSection = this.validateSection.bind(this)\r\n }\r\n\r\n static propTypes = {\r\n title : string,\r\n burnPermitId : number,\r\n Documents : array,\r\n DocumentTypes : array,\r\n UploadFiles : func,\r\n DownloadFile : func,\r\n DeleteFile : func,\r\n UpdateDocType : func,\r\n Failure : func,\r\n CheckIfFilesAreAlreadyAttached : func,\r\n online : bool,\r\n canUpload : bool,\r\n DocInfo : object,\r\n sectionValidationInfo : object,\r\n }\r\n\r\n static defaultProps = {\r\n Documents: [],\r\n }\r\n\r\n state = {\r\n errorMessage : '',\r\n badgeClass : 'info',\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n if (!isEqual(prevProps.Documents, this.props.Documents)) {\r\n this.setState({ badgeClass: 'secondary', })\r\n setTimeout(() => this.setState({ badgeClass: 'info', }), 1000)\r\n }\r\n }\r\n\r\n downloadDocument = (evt, document) => {\r\n stopEvent(evt)\r\n\r\n this.props.DownloadFile(this.props.burnPermitId, document.DocumentName, document.BurnPermitDocumentId)\r\n }\r\n\r\n deleteDocument = (evt, documentId) => {\r\n stopEvent(evt)\r\n\r\n this.props.DeleteFile(this.props.burnPermitId, documentId)\r\n }\r\n \r\n setDocumentType = (evt, docId) => {\r\n stopEvent(evt)\r\n const { value, } = evt.target\r\n if (parseInt(value) < 1) {\r\n this.setState({ errorMessage: 'You must choose a Document Type.', })\r\n return\r\n }\r\n if (this.state.errorMessage) {\r\n this.setState({ errorMessage: '', })\r\n }\r\n this.props.UpdateDocType(this.props.burnPermitId, docId, evt.target.value)\r\n }\r\n\r\n uploadFiles = files => this.props.UploadFiles(this.props.burnPermitId, files)\r\n \r\n uploadMailedAppDocAnyways = () => {\r\n if (!isEmpty(this.props.DocInfo)) {\r\n this.props.UpdateDocType(this.props.burnPermitId, this.props.DocInfo.documentId, this.props.DocInfo.documentTypeId, true)\r\n }\r\n else {\r\n this.props.Failure('Could not determine the document information to update the document type. Please contact support.')\r\n }\r\n }\r\n\r\n async validateSection ({ evt, }) {\r\n if (evt) {\r\n stopEvent(evt)\r\n }\r\n \r\n return this.props.sectionValidationInfo.isValid\r\n }\r\n\r\n render () {\r\n const { Documents, online, canUpload, sectionValidationInfo, } = this.props\r\n return {Documents.length}}\r\n >\r\n \r\n \r\n \r\n

\r\n Use the control below to upload supplemental documentation for your application.\r\n
\r\n This may include Burn Plans, Pile Calculator results, or .zip archives of .shp, .kmz, or other spatial data with boundary geometries of your burn locations.\r\n

\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {\r\n !sectionValidationInfo.isValid\r\n ? <>\r\n {\r\n sectionValidationInfo.needsForestDoc && \r\n }\r\n {\r\n sectionValidationInfo.needsPileLocDoc && \r\n }\r\n {\r\n sectionValidationInfo.needsTonnageDocs && \r\n }\r\n \r\n : null\r\n }\r\n {\r\n !online\r\n ? \r\n \r\n
\r\n Uploading a document, updating the document type, downloading the document, and deleting the document can only be performed while connected to the internet.\r\n
\r\n
\r\n \r\n : canUpload\r\n ? \r\n \r\n \r\n

Scans of the Mailed Application should be uploaded in the Signature Section when the application entry is complete and you are ready to sign the application for the applicant.

\r\n

Click Cancel to cancel modifying the document type now and instead click the Delete button on this document then navigate to the Signature Section to upload the document there.

\r\n

Click Continue to modify the document type anyways. However, you will have to delete this document later when you upload the document in the Signature Section when signing the application for the applicant.

\r\n }\r\n submitActionLabel={'Continue'}\r\n submitAction={this.uploadMailedAppDocAnyways}\r\n submitArgs={[ true, ]}\r\n />\r\n \r\n : \r\n \r\n
\r\n This Permit Application is no longer active or valid and is not allowed to have documents uploaded.\r\n
\r\n
\r\n \r\n }\r\n {\r\n Documents.length === 0\r\n ?

No documents found.

\r\n : Documents.map(d => {\r\n let documentTypes = [ ...this.props.DocumentTypes, ]\r\n if (!d.ReadOnly) {\r\n documentTypes = documentTypes.filter(t => !t.ReadOnly)\r\n }\r\n return \r\n \r\n \r\n \r\n \r\n \r\n {d.DocumentName}\r\n \r\n \r\n \r\n \r\n this.setDocumentType(evt, d.BurnPermitDocumentId)}\r\n errorMessage={this.state.errorMessage}\r\n className={'w-100'}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.downloadDocument(evt, d)}\r\n disabled={!online}\r\n >\r\n Download\r\n \r\n \r\n {\r\n online && \r\n \r\n this.deleteDocument(evt, d.BurnPermitDocumentId)}\r\n disabled={!online || d.ReadOnly}\r\n >\r\n Delete\r\n \r\n { d.ReadOnly &&\r\n \r\n

\r\n Some documents will become readonly once the Application or Permit advances to the next status.\r\n For example, any document(s) uploaded while filling out an application, then the application is submitted, all Pending docs are now readonly.\r\n

\r\n

\r\n Documents uploaded during the Submitted, Info Required, and Under review statuses can be modified or deleted when the application is in any of those statuses.\r\n

\r\n

\r\n Once the Permit is Issued, all documents uploaded to the application will then become readonly.\r\n Any document uploaded after the Permit is Issued will be modifiable or deletable until the Permit Expires or is Revoked.\r\n

\r\n

\r\n Once the Permit becomes Expired or Revoked, all documents become readonly.\r\n

\r\n }\r\n />\r\n }\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n })\r\n }\r\n \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n const { burnPermitId, } = props\r\n const { online, } = networkStateSelector(state)\r\n const canUpload = online && permitCanAcceptDocumentUploads(state, burnPermitId)\r\n return {\r\n online,\r\n canUpload,\r\n sectionValidationInfo : documentsSectionIsValid(state, burnPermitId),\r\n Documents : permitApplicationDocuments(state, burnPermitId),\r\n DocumentTypes : documentTypesForSelect(state),\r\n DocInfo : { ...state.BurnPermitForm.docTypeInfo, },\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n UploadFiles : BurnPermitFormActions.uploadPermitFiles,\r\n DownloadFile : BurnPermitFormActions.downloadPermitFile,\r\n DeleteFile : BurnPermitFormActions.deletePermitFile,\r\n UpdateDocType : BurnPermitFormActions.updateDocumentType,\r\n CheckIfFilesAreAlreadyAttached : BurnPermitFormActions.checkIfFilesAreAlreadyAttached,\r\n Failure : ApiActions.failure,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ApplicationDocuments)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Row, Col, Button, } from 'reactstrap'\nimport { bool, string, number, func, array, object, PropTypes, } from 'prop-types'\n\n// Redux\nimport BurnPermitFormActions from '../../redux/BurnPermitFormRedux'\n\n// Selectors\nimport { permitStatus, } from '../../selectors/selectors'\nimport { activeBurnPermitStateSelector, permitApplicationStatus, } from '../../selectors/burnPermitSelectors'\n\n// Utilities\nimport { scrollToErrors, } from '../../utilities'\n\nconst SUPPORTS_SMOOTH_SCROLL = 'scrollBehavior' in document.documentElement.style\n\nclass BurnPermitFormSection extends React.Component {\n\n static propTypes = {\n isOpen : bool,\n isDisabled : bool,\n isComplete : bool,\n validationError : string,\n title : string.isRequired,\n sectionId : number.isRequired,\n validateSection : func,\n shouldValidate : bool,\n children : PropTypes.oneOfType([ object, array, ]),\n PreviousStep : func,\n NextStep : func,\n SavedAndNextStep : func,\n InvalidStep : func,\n isInvalid : bool,\n isValid : PropTypes.oneOfType([ bool, string, ]),\n showControls : bool,\n readOnly : bool,\n canValidate : bool,\n sectionBadge : object,\n disableBack : bool,\n disableContinue : bool,\n hideContinue : bool,\n preContinueControl : PropTypes.oneOfType([ object, ]),\n continueText : string,\n continueFunc : func,\n }\n\n static defaultProps = {\n validationError : '',\n validationErrors : [],\n hideContinue : false,\n disableContinue : false,\n showControls : true,\n readOnly : false,\n disableBack : false,\n preContinueControl : null,\n continueText : 'Continue',\n }\n\n state = {\n isValidating: false,\n }\n\n componentDidUpdate = (prevProps) => {\n if (prevProps.isOpen !== true && this.props.isOpen === true) {\n this.onEntered()\n }\n }\n\n validationErrors = () => {\n const markup = []\n const { validationError, } = this.props\n if (validationError !== '') {\n const errors = validationError.split(';')\n for (let i = 0, len = errors.length; i < len; i++) {\n const error = errors[i]\n markup.push(\n
  • {error}
  • \n )\n }\n }\n return markup\n }\n\n saveAndNextStep = (evt) => {\n const {\n sectionId,\n validateSection,\n InvalidStep,\n SavedAndNextStep,\n } = this.props\n const domId = `#burn-permit-section-${sectionId}`\n const isValid = typeof validateSection === 'function'\n ? validateSection({ evt, submit: true, })\n : true\n if (typeof isValid === 'boolean') {\n if (isValid) {\n // Formik will cancel any submission actions if it's ripped from the DOM\n // Add a timeout so that the submit event finishes in its\n // event loop and this occurs in the next\n setTimeout(() => SavedAndNextStep(sectionId), 100)\n }\n else {\n scrollToErrors(domId)\n InvalidStep(sectionId)\n }\n }\n else if (isValid instanceof Promise) {\n isValid.then(resp => {\n if (resp !== false) {\n // Formik will cancel any submission actions if it's ripped from the DOM\n // Add a timeout so that the submit event finishes in its\n // event loop and this occurs in the next\n setTimeout(() => SavedAndNextStep(sectionId), 100)\n }\n else {\n scrollToErrors(domId)\n InvalidStep(sectionId)\n }\n })\n }\n }\n \n onEntered () {\n if (typeof this.props.validateSection === 'function' && (this.props.shouldValidate || this.props.isInvalid)) {\n this.props.validateSection({ submit: false, })\n }\n let sectionCol = document.querySelector('#burn-permit-section-' + this.props.sectionId)\n if (sectionCol && !this.state.isValidating) {\n let { top, } = sectionCol.getBoundingClientRect()\n top = (window.pageYOffset + top) - 100\n if (SUPPORTS_SMOOTH_SCROLL) {\n window.scrollTo({ top, behavior: 'smooth', })\n }\n else {\n window.scrollTo(0, top)\n }\n }\n this.setState({ isValidating: false, })\n }\n\n previousClick = () => {\n this.props.PreviousStep()\n }\n\n nextClick = () => {\n this.props.NextStep()\n }\n\n render () {\n\n if (this.props.isOpen !== true) {\n return null\n }\n\n const {\n isDisabled,\n sectionId,\n disableContinue,\n hideContinue,\n disableBack,\n showControls,\n children,\n } = this.props\n\n let classes = 'burn-permit-section pt-2'\n\n if (isDisabled) {\n classes += ' disabled'\n }\n\n return (\n
    \n
    \n \n
      \n {this.validationErrors()}\n
    \n
    \n \n { children }\n \n {\n showControls &&\n \n \n <>\n {\n disableBack\n ? null\n : \n Back\n \n }\n {\n hideContinue\n ? null\n :
    \n { this.props.preContinueControl }\n \n { this.props.continueText }\n \n
    \n }\n \n \n
    \n }\n
    \n
    \n )\n }\n}\n\nfunction mapStateToProps (state, props) {\n const { sectionId, isValid, } = props\n \n const {\n activeStep,\n completedSteps,\n invalidSteps,\n shouldValidate,\n activeBurnPermitId,\n } = activeBurnPermitStateSelector(state)\n let canValidate = false\n\n const permitId = props.activeBurnPermit || activeBurnPermitId\n if (permitId) {\n let status = permitStatus(state, permitId)\n if (!status) {\n status = permitApplicationStatus(state, permitId)\n if (status && (status.Status === 'Pending' || status.Status === 'Info Required')) {\n canValidate = true\n }\n }\n }\n return {\n isOpen : props.isOpen || sectionId === activeStep,\n isComplete : completedSteps.includes(sectionId),\n isInvalid : typeof isValid === 'boolean' ? !isValid : invalidSteps.includes(sectionId),\n shouldValidate,\n canValidate,\n }\n}\n\nconst mapDispatchToProps = {\n PreviousStep : BurnPermitFormActions.previousStep,\n NextStep : BurnPermitFormActions.nextStep,\n SavedAndNextStep : BurnPermitFormActions.savedAndNextStep,\n InvalidStep : BurnPermitFormActions.invalidStep,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitFormSection)","import React from 'react'\r\n// import { Prompt, } from 'react-router'\r\nimport * as PropTypes from 'prop-types'\r\nimport { isEmpty, difference, isEqual, } from 'lodash'\r\n\r\nclass Effect extends React.Component {\r\n static propTypes = {\r\n location : PropTypes.object,\r\n values : PropTypes.object,\r\n onChange : PropTypes.func,\r\n errors : PropTypes.object,\r\n hasErrors : PropTypes.func,\r\n // This flag must be provided as it's used as toggle to prevent an infinite loop\r\n isSubmitting : PropTypes.bool.isRequired,\r\n showDetailedError : PropTypes.bool,\r\n promptPendingChangesOnNav : PropTypes.bool,\r\n isDirty : PropTypes.bool,\r\n }\r\n\r\n static defaultProps = {\r\n values : {},\r\n errors : {},\r\n isSubmitting : false,\r\n showDetailedError : false,\r\n promptPendingChangesOnNav : false,\r\n isDirty : false,\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const {\r\n values,\r\n errors,\r\n onChange,\r\n hasErrors,\r\n isSubmitting,\r\n showDetailedError,\r\n } = this.props\r\n\r\n const changedEntries = Object.entries(prevProps.values).filter(e => {\r\n const entry = values[e[0]]\r\n if (Array.isArray(entry)) {\r\n if (entry.every(e => typeof e !== 'object')) {\r\n // Convert the values to strings to make sure there being compared\r\n // using the same type\r\n const prevVals = entry.map(en => en && en.toString())\r\n const currVals = e[1].map(en => en && en.toString())\r\n return difference(prevVals, currVals).length\r\n }\r\n else {\r\n return !isEqual(entry[0], e[1][0])\r\n }\r\n }\r\n else {\r\n // Perform an object equality comparison instead of an identity comparison\r\n // This is because some of the values being compared are coming from form inputs\r\n // and sometimes they may not have their types properly set. In the case of numerical\r\n // values, the identity comparison would say \"1\" <> 1 in the case of a number input or\r\n // select where the value was a number from the server response, but the change by the\r\n // user made the pending value in `values` a string version\r\n // eslint-disable-next-line\r\n return entry != e[1]\r\n }\r\n })\r\n if (changedEntries.length || !isEqual(prevProps.values, values)) {\r\n if (typeof onChange === 'function') {\r\n onChange(changedEntries, values)\r\n }\r\n }\r\n \r\n if (isSubmitting && !isEmpty(errors) && typeof(hasErrors) === 'function') {\r\n let errorMessage = 'Error: One or more form inputs are invalid.'\r\n if (showDetailedError) {\r\n errorMessage += '\\n\\n' + Object.values(errors).join('\\n')\r\n }\r\n hasErrors(errorMessage)\r\n }\r\n }\r\n\r\n render () {\r\n const { promptPendingChangesOnNav, isDirty, } = this.props\r\n if (promptPendingChangesOnNav && isDirty) {\r\n return null\r\n // TODO: handle replacing Prompt\r\n // return \r\n }\r\n\r\n return null\r\n }\r\n}\r\n\r\nexport default Effect","import { bool, string, number, oneOfType, } from 'prop-types'\r\n\r\nexport const authPropsTypes = {\r\n isAuthenticated : bool,\r\n isDnr : bool,\r\n isAdmin : bool,\r\n isSAWUser : bool,\r\n isPrivate : bool,\r\n isGovAgent : bool,\r\n paysByVoucher : bool,\r\n isAgent : bool,\r\n isVerifiedAgent : bool,\r\n IsLoadingUser : bool, \r\n LoginError : string, \r\n isStateGovCust : bool,\r\n isADFS : bool,\r\n}\r\n\r\nexport const authPropsDefaults = {\r\n isAuthenticated : false,\r\n isDnr : false,\r\n isAdmin : false,\r\n isSAWUser : false,\r\n isPrivate : false,\r\n isGovAgent : false,\r\n paysByVoucher : false,\r\n isAgent : false,\r\n isVerifiedAgent : false,\r\n IsLoadingUser : false, \r\n LoginError : '', \r\n isStateGovCust : false,\r\n isADFS : false,\r\n}\r\n\r\nexport const addressPropsTypes = {\r\n // Accept strings in case an empty string is provided\r\n AddressId : oneOfType([ string, number, ]),\r\n // Accept strings in case an empty string is provided\r\n AddressTypeId : oneOfType([ string, number, ]),\r\n StreetLine1 : string.isRequired,\r\n StreetLine2 : string,\r\n StreetLine3 : string,\r\n AddressCity : string.isRequired,\r\n AddressState : string.isRequired,\r\n AddressZipCode : oneOfType([ string, number, ]).isRequired,\r\n}\r\n\r\nexport const addressPropsDefaults = {\r\n AddressId : '',\r\n AddressTypeId : '',\r\n StreetLine1 : '',\r\n StreetLine2 : '',\r\n StreetLine3 : '',\r\n AddressCity : '',\r\n AddressState : '',\r\n AddressZipCode : '',\r\n}","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { debounce, isEmpty, isEqual, } from 'lodash'\r\nimport { Formik, Field, ErrorMessage, } from 'formik'\r\nimport { Row, Col, FormGroup, Label, Button, ButtonGroup, FormFeedback, } from 'reactstrap'\r\nimport {\r\n object,\r\n bool,\r\n array,\r\n func,\r\n number,\r\n string,\r\n shape,\r\n PropTypes,\r\n} from 'prop-types'\r\n\r\n// Components\r\nimport Effect from '../Effect'\r\nimport AuditData from '../AuditData'\r\nimport {\r\n Select,\r\n ValidatingField,\r\n RequiredLabel,\r\n PopoverButton,\r\n ButtonGroupButton,\r\n} from '../FormControls'\r\n\r\n// Selectors\r\nimport { addressTypesSelectSelector, } from '../../selectors/selectors'\r\n\r\n// Reducers\r\nimport GeoCoordinateActions from '../../redux/GeoCoordinateRedux'\r\nimport ApiActions from '../../redux/ApiRedux'\r\n\r\n// Models\r\nimport Address from '../../models/Address'\r\n\r\n// Utilities\r\nimport {\r\n addressPropsDefaults,\r\n addressPropsTypes,\r\n} from '../../utilities/props'\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n\r\nexport class AddressForm extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n this.onChange = debounce(this.onChange.bind(this), 300)\r\n this.hasValues = this.hasValues.bind(this)\r\n\r\n this.state = {\r\n lastGeocode: null,\r\n }\r\n \r\n this.setValSchema()\r\n }\r\n\r\n static propTypes = {\r\n online : bool,\r\n addressId : PropTypes.oneOfType([ number, string, ]),\r\n address : shape(addressPropsTypes),\r\n showAddressTypes : bool,\r\n showActiveControl : bool,\r\n addressTypes : array,\r\n disableState : bool,\r\n disableStreeLine3 : bool,\r\n readOnly : bool,\r\n enableReinitialize : bool,\r\n createFn : func,\r\n updateFn : func,\r\n shouldGeocode : bool,\r\n CreateRecord : func,\r\n UpdateRecord : func,\r\n Geocode : func,\r\n ClearGeocodeResult : func,\r\n onChange : func,\r\n showAuditData : bool,\r\n validateStrict : bool,\r\n resetOnBlur : bool,\r\n actionButton : object,\r\n description : PropTypes.oneOfType([ object, string, ]),\r\n }\r\n\r\n static defaultProps = {\r\n showAddressTypes : true,\r\n readOnly : false,\r\n createFn : null,\r\n shouldGeocode : true,\r\n showAuditData : false,\r\n validateStrict : false,\r\n enableReinitialize : true,\r\n }\r\n\r\n setValSchema () {\r\n this.valSchema = this.props.validateStrict\r\n ? Address.getBasicValidationSchema()\r\n : Address.getValidationSchema()\r\n }\r\n\r\n componentDidMount () {\r\n const { shouldGeocode, address, online, } = this.props\r\n\r\n if (online && shouldGeocode && address && !address.AddressLocation) {\r\n this.geocodeAddress(address)\r\n }\r\n\r\n this.setValSchema()\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n if (prevProps.validateStrict !== this.props.validateStrict) {\r\n this.setValSchema()\r\n }\r\n }\r\n \r\n geocodeAddress = address => {\r\n const { Geocode, } = this.props\r\n const {\r\n StreetLine1,\r\n AddressCity,\r\n AddressState,\r\n AddressZipCode,\r\n } = address\r\n const geocodeValues = {\r\n StreetLine1,\r\n AddressCity,\r\n AddressState,\r\n AddressZipCode,\r\n }\r\n // If some of the values are empty, don't attempt to geocode\r\n if (Object.values(geocodeValues).some(v => !v)) {\r\n // Should clear any geocoded value in the map state tho\r\n this.props.ClearGeocodeResult()\r\n return\r\n }\r\n \r\n if (!isEqual(this.state.lastGeocode, geocodeValues)) {\r\n Geocode(StreetLine1, AddressCity, AddressState, AddressZipCode)\r\n this.setState({ lastGeocode: geocodeValues, })\r\n }\r\n }\r\n\r\n async validateForm (force) {\r\n if (!this.formik) {\r\n return null\r\n }\r\n const touched = this.touched()\r\n this.formik.setFieldValue('Force', force || false)\r\n if (force || touched) {\r\n const formKeys = Object.keys(this.formik.values)\r\n for (let i = 0, len = formKeys.length; i < len; i++) {\r\n this.formik.setFieldTouched(formKeys[i])\r\n }\r\n }\r\n return this.formik.validateForm()\r\n }\r\n\r\n clearForm = () => {\r\n const values = { ...this.formik.initialValues, }\r\n const addrKeys = Object.keys(values)\r\n const touched = {}\r\n for (let key of addrKeys) {\r\n if (this.props.disableState && key === 'AddressState') {\r\n continue\r\n }\r\n values[key] = ''\r\n touched[key] = false\r\n }\r\n this.formik.setValues(values)\r\n // Use a setTimeout here so that it executes\r\n // after formik has updated its state and sets\r\n // the errors for the required fields so then\r\n // we can clear them\r\n setTimeout(() => {\r\n const errors = { ...this.formik.errors, }\r\n for (let err of Object.keys(errors).filter(e => addrKeys.includes(e))) {\r\n delete errors[err]\r\n }\r\n this.formik.setErrors(errors)\r\n this.formik.setTouched(touched)\r\n }, 1)\r\n }\r\n\r\n resetForm = () => {\r\n this.formik.resetForm(this.formik.initialValues)\r\n }\r\n\r\n submitForm = () => {\r\n this.formik.submitForm()\r\n }\r\n\r\n touched = () => {\r\n if (this.formik) {\r\n return Object.values(this.formik.touched).some(t => t === true)\r\n }\r\n // unable to check if touched, just return true\r\n return true\r\n }\r\n\r\n submit = (values) => {\r\n const {\r\n address,\r\n addressTypes,\r\n CreateRecord,\r\n UpdateRecord,\r\n } = this.props\r\n let { addressId, } = this.props\r\n \r\n addressId = parseInt(address ? address.AddressId : addressId)\r\n\r\n if (isNaN(parseInt(values.AddressTypeId))) {\r\n const defaultAddrType = addressTypes.find(a => a.Text === 'Mailing')\r\n values.AddressTypeId = defaultAddrType.Value\r\n }\r\n // Get the object entries\r\n const valueEntries = Object.entries(values)\r\n // Get the number of entered values\r\n const enteredValues = valueEntries.filter(v => v[1]).length\r\n // Check if they're IDs only\r\n const idsOnly = valueEntries\r\n // filter out the object entries to only those that have a value\r\n .filter(e => !!e[1])\r\n // Then check to see if all the properties are ID props only\r\n .every(e => e[0].indexOf('Id') > -1)\r\n\r\n // If we have an AddressId and more than 1 value entered\r\n // the user is updating the Address\r\n if (!isNaN(addressId) && enteredValues && !idsOnly && (!address || (address && !address.IsLocal))) {\r\n values['AddressId'] = addressId\r\n if (this.props.updateFn) {\r\n this.props.updateFn(values)\r\n }\r\n else {\r\n UpdateRecord('Address', values)\r\n }\r\n }\r\n // Only attempt to create an address if they likely have \r\n // enough values\r\n else if (enteredValues > 2) {\r\n if (typeof this.props.createFn === 'function') {\r\n this.props.createFn(values)\r\n }\r\n else {\r\n CreateRecord('Address', values, 'Addresses', true)\r\n }\r\n }\r\n }\r\n\r\n hasValues () {\r\n if (!this.formik) {\r\n return false\r\n }\r\n const {\r\n StreetLine1,\r\n AddressCity,\r\n AddressState,\r\n AddressZipCode,\r\n } = this.formik.values\r\n const values = {\r\n StreetLine1,\r\n AddressCity,\r\n AddressState,\r\n AddressZipCode,\r\n }\r\n // If the user enters a value in one or more inputs, but then clears them, `dirty` will return false\r\n // WA is always set in the form, therefore entries.some checks for values that aren't euqivalent to WA\r\n return this.formik.dirty || Object.entries(values).some(([ , val, ]) => !!val && val !== 'WA')\r\n }\r\n\r\n // this method is bound with debounce in the constructor to reduce changes and geocode calls\r\n onChange () {\r\n if (typeof this.props.onChange === 'function') {\r\n this.props.onChange()\r\n }\r\n if (this.props.online && this.formik && this.props.shouldGeocode) {\r\n this.geocodeAddress(this.formik.values)\r\n }\r\n }\r\n\r\n setFormikNode = node => this.formik = node\r\n\r\n resetTouchedOnBlur = evt => {\r\n const { name, value, } = evt.target\r\n this.formik.setTouched({ ...this.formik.touched, [name]: !!value, })\r\n }\r\n\r\n render () {\r\n const {\r\n disableState,\r\n disableStreeLine3,\r\n readOnly,\r\n showAddressTypes,\r\n showActiveControl,\r\n addressTypes,\r\n description,\r\n enableReinitialize,\r\n resetOnBlur,\r\n } = this.props\r\n \r\n const address = {\r\n // Ensure all the required properties are set\r\n ...addressPropsDefaults,\r\n // Override the default values with the incoming object values\r\n ...this.props.address,\r\n }\r\n // Ensure every property is not null or undefined otherwise\r\n // React/Formik will spit out a warning about a component changing\r\n // from uncontrolled to controlled\r\n for (let key of Object.keys(address)) {\r\n if (address[key] === null || address[key] === undefined) {\r\n address[key] = ''\r\n }\r\n }\r\n\r\n return \r\n {({ values, }) => (\r\n <>\r\n \r\n { description &&

    {description}

    }\r\n \r\n {\r\n showAddressTypes &&\r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n Street Line 1\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n disableStreeLine3\r\n ? null\r\n : \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n City\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n State\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Zip\r\n \r\n \r\n \r\n \r\n \r\n {\r\n showActiveControl &&\r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n <>\r\n \r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, true)\r\n form.setFieldTouched(field.name, true)\r\n }}\r\n isActive={typeof field.value === 'boolean' ? field.value : true}\r\n text={'Yes'}\r\n />\r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, false)\r\n form.setFieldTouched(field.name, true)\r\n }}\r\n isActive={typeof field.value === 'boolean' ? !field.value : false}\r\n text={'No'}\r\n />\r\n \r\n \r\n \r\n {errorMessage => {errorMessage}}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n }\r\n {\r\n this.props.showAuditData === true && !isEmpty(address) &&\r\n \r\n \r\n \r\n }\r\n {\r\n !readOnly && \r\n
    \r\n
    \r\n \r\n Reset\r\n \r\n \r\n This will reset to the initial values if there were\r\n any or clear any errors if the form was initially empty\r\n

    }\r\n />\r\n \r\n Clear\r\n \r\n \r\n

    \r\n This will clear out all inputs, but some may still \r\n be required if other form data is not provided.\r\n

    \r\n It is only enabled when there are values entered.\r\n }\r\n />\r\n
    \r\n { this.props.actionButton }\r\n
    \r\n }\r\n \r\n )}\r\n \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n addressTypes: addressTypesSelectSelector(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n CreateRecord : ApiActions.createRecord,\r\n UpdateRecord : ApiActions.updateRecord,\r\n Geocode : GeoCoordinateActions.geocode,\r\n ClearGeocodeResult : GeoCoordinateActions.clearGeocodeResult,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(AddressForm)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { isEmpty, } from 'lodash'\nimport { object, bool, func, } from 'prop-types'\nimport { Formik, Field, } from 'formik'\nimport { Row, Col, FormGroup, Label, } from 'reactstrap'\n\n// Reducers\nimport ApiActions from '../../redux/ApiRedux'\n\n// Components\nimport { YesNoRadioButtonGroup, } from '../FormControls'\nimport AuditData from '../AuditData'\n\n// Models\nimport Agency from '../../models/Agency'\nimport ValidatingField from '../FormControls/ValidatingField'\n\nconst validationSchema = Agency.getValidationSchema()\n\n\nexport class AgencyForm extends React.Component {\n static propTypes = {\n isDisabled : bool,\n agency : object,\n readOnly : bool,\n createFn : func,\n updateFn : func,\n showAuditData : bool,\n isNewAgency : bool,\n // dispatch\n CreateRecord : func,\n UpdateRecord : func,\n }\n\n static defaultProps = {\n readOnly : false,\n createFn : null,\n updateFn : null,\n showAuditData : false,\n isNewAgency : false,\n }\n\n validateForm = () => {\n return this.formik.validateForm()\n }\n\n submitForm = () => {\n this.formik.submitForm()\n }\n\n touched = () => {\n if (this.formik && this.formik && this.formik.touched) {\n return Object.values(this.formik.touched).some(t => t === true)\n }\n return true\n }\n\n submit = (values) => {\n const { isNewAgency, agency, UpdateRecord, CreateRecord, } = this.props\n if (!isNewAgency && agency && agency.AgencyId) {\n values['AgencyId'] = agency.AgencyId\n values['AddressId'] = agency.AddressId\n values['PhoneId'] = agency.PhoneId\n values['EmailId'] = agency.EmailId\n if (!this.props.updateFn) {\n UpdateRecord('Agency', agency.AgencyId, values, 'Agencies')\n } else {\n this.props.updateFn(values)\n }\n } else {\n delete values.AgencyId\n if (!this.props.createFn) {\n CreateRecord('Agency', values, 'Agencies', true)\n } else {\n this.props.createFn(values)\n }\n }\n }\n \n setFormikNode = node => this.formik = node\n\n render () {\n const { agency, readOnly, showAuditData, } = this.props\n if (!agency) {\n return null\n }\n return (\n \n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {({ field, form, }) => (\n \n Auto Region Approval\n
    \n Typically used for Federal Agencies only\n \n }\n onChange={evt => {\n form.setFieldValue(field.name, evt.target.value === 'yes')\n form.setFieldTouched(field.name, true)\n }}\n inputName={field.name}\n checkedValue={field.value ? 'yes' : 'no'}\n readOnly={readOnly}\n errorMessage={form.errors[field.name]}\n invalid={!!form.errors[field.name]}\n />\n )}\n
    \n
    \n \n \n \n \n {({ field, form, }) => (\n \n Pays By Voucher\n
    \n Typically used for State or Federal Agencies only\n \n }\n onChange={evt => {\n form.setFieldValue(field.name, evt.target.value === 'yes')\n form.setFieldTouched(field.name, true)\n }}\n inputName={field.name}\n checkedValue={field.value ? 'yes' : 'no'}\n readOnly={readOnly}\n errorMessage={form.errors[field.name]}\n invalid={!!form.errors[field.name]}\n />\n )}\n
    \n
    \n \n
    \n {\n showAuditData === true && !isEmpty(agency) &&\n \n \n \n }\n \n \n )\n }\n}\n\nconst mapDispatchToProps = {\n CreateRecord : ApiActions.createRecord,\n UpdateRecord : ApiActions.updateRecord,\n}\n\nexport default connect(null, mapDispatchToProps, null, { forwardRef: true, })(AgencyForm)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { isEmpty, } from 'lodash'\r\nimport { Formik, Field, ErrorMessage, } from 'formik'\r\nimport { Row, Col, FormGroup, Label, FormFeedback, ButtonGroup, ListGroup, ListGroupItem, Badge, Fade, Button, } from 'reactstrap'\r\nimport { object, bool, func, array, } from 'prop-types'\r\n\r\n// Components\r\nimport Effect from '../Effect'\r\nimport AuditData from '../AuditData'\r\nimport { Select, ValidatingField, PopoverButton, ButtonGroupButton, RequiredLabel, } from '../FormControls'\r\n\r\n// Selectors\r\nimport { phoneTypesSelector, } from '../../selectors/selectors'\r\n\r\n// Actions\r\nimport ApiActions from '../../redux/ApiRedux'\r\n\r\n// Models\r\nimport Phone from '../../models/Phone'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n\r\nexport class PhoneForm extends React.Component {\r\n\r\n static propTypes = {\r\n phone : object,\r\n onSubmit : func,\r\n phoneTypes : array,\r\n readOnly : bool,\r\n createFn : func,\r\n updateFn : func,\r\n UpdateRecord : func,\r\n CreateRecord : func,\r\n showAuditData : bool,\r\n showActiveControl : bool,\r\n enableReinitialize : bool,\r\n actionButton : object,\r\n }\r\n\r\n static defaultProps = {\r\n readOnly : false,\r\n createFn : null,\r\n showAuditData : false,\r\n }\r\n\r\n state = {\r\n showReceivesAlerts: false,\r\n }\r\n\r\n valSchema = Phone.getValidationSchema()\r\n\r\n componentDidMount () {\r\n if (this.props.phone) {\r\n this.showReceivesAlerts(this.props.phone.PhoneTypeId)\r\n }\r\n }\r\n\r\n validateForm = async () => {\r\n return this.formik.validateForm()\r\n }\r\n\r\n submitForm = () => {\r\n this.formik.submitForm()\r\n }\r\n\r\n submit = (values) => {\r\n const { UpdateRecord, CreateRecord, phone, } = this.props\r\n const {\r\n PhoneId,\r\n PhoneNumber,\r\n PhoneExtension,\r\n PhoneTypeId,\r\n ReceivesAlerts,\r\n Active,\r\n } = values\r\n\r\n if (phone && PhoneId && !phone.IsLocal) {\r\n const phoneObj = {\r\n PhoneTypeId,\r\n PhoneId: phone.PhoneId,\r\n PhoneNumber,\r\n PhoneExtension,\r\n ReceivesAlerts,\r\n Active,\r\n }\r\n if (this.props.updateFn) {\r\n this.props.updateFn(phoneObj)\r\n }\r\n else {\r\n UpdateRecord('Phone', phoneObj)\r\n }\r\n }\r\n else {\r\n const phoneObj = {\r\n PhoneId,\r\n PhoneTypeId,\r\n PhoneNumber,\r\n PhoneExtension,\r\n ReceivesAlerts,\r\n Active,\r\n PhoneNumberConfirmed: false,\r\n }\r\n if (this.props.createFn) {\r\n this.props.createFn(phoneObj)\r\n }\r\n else {\r\n CreateRecord('Phone', phoneObj, 'Phones' , true)\r\n }\r\n }\r\n }\r\n\r\n resetForm = () => {\r\n this.formik.resetForm(this.formik.initialValues)\r\n }\r\n\r\n touched = () => {\r\n if (this.formik) {\r\n return Object.values(this.formik.touched).some(t => t === true)\r\n }\r\n // unable to check if touched, just return true\r\n return true\r\n }\r\n\r\n showReceivesAlerts = value => {\r\n let showReceivesAlerts = false\r\n if (Array.isArray(this.props.phoneTypes)) {\r\n const mobilePhoneType = this.props.phoneTypes.filter(t => t.Text === 'Mobile')[0]\r\n if (mobilePhoneType) {\r\n showReceivesAlerts = parseInt(value) === parseInt(mobilePhoneType.Value)\r\n }\r\n }\r\n this.setState({ showReceivesAlerts, })\r\n }\r\n\r\n onPhoneTypeChange = e => {\r\n const { value, name, } = e.target\r\n if (this.formik) {\r\n this.formik.setFieldValue(name, value)\r\n this.showReceivesAlerts(value)\r\n }\r\n }\r\n\r\n setFormikNode = node => this.formik = node\r\n\r\n render () {\r\n const {\r\n readOnly,\r\n phone,\r\n showAuditData,\r\n showActiveControl,\r\n actionButton,\r\n enableReinitialize,\r\n } = this.props\r\n return (\r\n \r\n {({ values , }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, true)\r\n form.setFieldTouched(field.name, true)\r\n }}\r\n isActive={typeof field.value === 'boolean' ? field.value : false}\r\n text={'Yes'}\r\n />\r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, false)\r\n form.setFieldTouched(field.name, true)\r\n }}\r\n isActive={typeof field.value === 'boolean' ? !field.value : true}\r\n text={'No'}\r\n />\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Phone Number\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n showActiveControl &&\r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n <>\r\n \r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, true)\r\n form.setFieldTouched(field.name, true)\r\n }}\r\n isActive={typeof field.value === 'boolean' ? field.value : true}\r\n text={'Yes'}\r\n />\r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, false)\r\n form.setFieldTouched(field.name, true)\r\n }}\r\n isActive={typeof field.value === 'boolean' ? !field.value : false}\r\n text={'No'}\r\n />\r\n \r\n \r\n \r\n {errorMessage => {errorMessage}}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n }\r\n {\r\n showAuditData === true && !isEmpty(phone) &&\r\n \r\n \r\n \r\n }\r\n {\r\n !readOnly && \r\n
    \r\n \r\n { actionButton }\r\n
    \r\n }\r\n \r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n return {\r\n phoneTypes: phoneTypesSelector(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n CreateRecord : ApiActions.createRecord,\r\n UpdateRecord : ApiActions.updateRecord,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(PhoneForm)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { FormGroup, Label, Row, Col, Button, } from 'reactstrap'\nimport { Formik, Field, } from 'formik'\nimport { object, bool, func, } from 'prop-types'\nimport { isEmpty, } from 'lodash'\n\n// Reducres\nimport ApiActions from '../../redux/ApiRedux'\n\n// Models\nimport Email from '../../models/Email'\n\n// Components\nimport AuditData from '../AuditData'\nimport ValidatingField from '../FormControls/ValidatingField'\n\n\nclass EmailForm extends React.Component {\n static propTypes = {\n Create : func,\n Update : func,\n email : object,\n readOnly : bool,\n createFn : func,\n updateFn : func,\n deleteFn : func,\n showDelete : bool,\n showAuditData : bool,\n isEmailRequired : bool,\n }\n\n static defaultProps = {\n readOnly : false,\n createFn : null,\n deleteFn : null,\n showDelete : false,\n showAuditData : false,\n isEmailRequired : true,\n }\n\n touched = () => {\n if (this.formik && this.formik && this.formik.touched) {\n return Object.values(this.formik.touched).some(t => t === true)\n }\n \n // unable to check if touched, just return true\n return true\n }\n\n validate = async () => {\n return this.formik.validateForm()\n }\n\n submit = () => {\n this.formik.submitForm()\n }\n\n /**\n * Return the current EmailAddress value\n */\n getEmailAddress = () => {\n const values = this.formik.values\n if (values && values.EmailAddress) {\n return values.EmailAddress\n }\n return null\n }\n\n formikSubmit = (values) => {\n const { EmailAddress, } = values\n const { email, Create, Update, } = this.props\n let emailToSubmit = { EmailAddress, }\n \n let create = (!email || isNaN(email.EmailId) || (email.EmailId < 1))\n\n if (create) {\n if (typeof this.props.createFn === 'function') {\n // if we have a custom create function, use it\n this.props.createFn(emailToSubmit)\n }\n else {\n Create('Email', email.EmailId, emailToSubmit, 'Emails')\n }\n }\n else {\n // add the email ID to what's being submitted\n emailToSubmit['EmailId'] = email.EmailId\n if (typeof this.props.updateFn === 'function') {\n // if we have a custom update function, use it\n this.props.updateFn(emailToSubmit)\n }\n else {\n Update('Email', emailToSubmit)\n }\n }\n }\n\n setFormikNode = node => this.formik = node\n\n onDeleteClick = (e) => {\n e.preventDefault()\n if (this.props.email.EmailId && this.props.email.EmailId > 0){\n if (this.props.deleteFn) {\n this.props.deleteFn()\n }\n } else {\n this.formik.setValues({ EmailAddress: '', })\n }\n }\n\n render () {\n // isEmailRequired checks to see what form we are in and remove .required, any Form that is not the PersonForm will .require validation\n const { email, readOnly, showAuditData, isEmailRequired, showDelete, } = this.props\n const emailFieldSize = {\n xs : showDelete ? 11: 12,\n sm : showDelete ? 11 : 12,\n md : showDelete ? 9 : 12,\n xl : showDelete ? 10 : 12,\n }\n return (\n \n <>\n \n \n \n \n \n {\n this.props.showDelete &&\n \n \n \n }\n \n {\n showAuditData === true && !isEmpty(email) &&\n \n \n \n }\n \n \n )\n }\n}\n\nconst mapDispatchToProps = {\n Create : ApiActions.createRecord,\n Update : ApiActions.updateRecord,\n}\n\nexport default connect(null, mapDispatchToProps, null, { forwardRef: true, })(EmailForm)","/**\r\n * Filters the provided array of Formik form refs to only the\r\n * ones that have a `validateForm` method then calls that method\r\n * on each form\r\n * @async\r\n * @param {Array{Formik}} forms An array or Formik forms\r\n * @returns {bool} Whether or not one or more of the forms is invalid\r\n */\r\nasync function validateAll (forms) {\r\n try {\r\n const formsToValidate = forms.filter(f => f && 'validateForm' in f && typeof f.validateForm === 'function' && f.validateForm())\r\n // Validate all of the forms so that the inline validation messages appear\r\n const formErrors = await Promise.all(formsToValidate.map(f => f.validateForm()))\r\n // Return a bool indicating that one or more forms is invalid\r\n return formErrors.some(f => Object.keys(f).length)\r\n }\r\n catch (err) {\r\n console.error(err)\r\n }\r\n}\r\n\r\n/**\r\n * Filters the provided array of Formik form refs to only the\r\n * ones that have one or more inputs that were touched\r\n * @param {Array{Formik}} forms An array or Formik forms\r\n */\r\nfunction submitAll (forms) {\r\n try {\r\n const formsToSubmit = forms.filter(f => f && 'touched' in f && typeof f.touched === 'function' && f.touched())\r\n formsToSubmit.forEach(f => f.submitForm())\r\n }\r\n catch (err) {\r\n console.error(err)\r\n }\r\n}\r\n\r\nexport {\r\n validateAll,\r\n submitAll,\r\n}\r\n","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { isEqual, isEmpty, } from 'lodash'\nimport { Row, Col, FormGroup, Label, Button, Card, CardBody, Fade, ButtonGroup, } from 'reactstrap'\nimport { Formik, Form, Field, } from 'formik'\nimport { object, bool, func, } from 'prop-types'\n\n// Selectors\nimport {\n burnNoticeSubscriberInactiveData,\n} from '../../selectors/burnNoticeSubscriberSelectors'\n\n// Components\nimport PhoneForm from './PhoneForm'\nimport EmailForm from './EmailForm'\nimport Effect from '../Effect'\nimport AuditData from '../AuditData'\nimport {\n ValidatingField,\n RowToggler,\n ButtonGroupButton,\n} from '../FormControls'\n\n// Actions\nimport BurnNoticeSubscriberActions from '../../redux/BurnNoticeSubscriberRedux'\n\n// Models\nimport BurnNoticeSubscriber from '../../models/BurnNoticeSubscriber'\n\n// Utilities\nimport { scrollToErrors, } from '../../utilities'\nimport stopEvent from '../../utilities/stopEvent'\nimport { validateAll, submitAll, } from '../../utilities/forms'\n\nclass BurnNoticeSubscriberForm extends React.Component {\n\n constructor (props) {\n super(props)\n\n this.onSaveClick = this.onSaveClick.bind(this)\n }\n\n PhoneForms = []\n EmailForm = null\n\n static propTypes = {\n // actions\n OpenModal : func,\n Failure : func,\n RedirectTo : func,\n CreateBurnNoticeSubscriber : func,\n CreateLocalPhoneForBurnNoticeSubscriber : func,\n CreateBurnNoticeSubscriberPhone : func,\n DeleteBurnNoticeSubscriberPhone : func,\n CreateBurnNoticeSubscriberEmail : func,\n DeleteBurnNoticeSubscriberEmail : func,\n UpdateBurnNoticeSubscriber : func,\n GetBurnNoticeSubscriberLookupData : func,\n SetInactiveMetadata : func,\n // own props\n online : bool,\n inactiveData : object,\n showPhones : bool,\n phones : object,\n showEmails : bool,\n disableDeleteEmail : bool,\n email : object,\n showAuditData : bool,\n readOnly : bool,\n burnNoticeSubscriber : object,\n isNewBurnNoticeSubscriber : bool,\n }\n \n static defaultProps = {\n readOnly : false,\n showAuditData : true,\n }\n\n state = {\n phonesAreShowing: false,\n }\n\n validateForm = async () => {\n // Dunno why, but had an error thrown here saying could not call\n // validateForm of object null\n if (!this.formik) {\n return false\n }\n return await this.formik.validateForm()\n }\n\n onAddPhoneClick = evt => {\n stopEvent(evt)\n\n this.props.CreateLocalPhoneForBurnNoticeSubscriber(this.props.burnNoticeSubscriber.BurnNoticeSubscriberId)\n }\n\n onDeletePhoneClick = evt => {\n stopEvent(evt)\n\n const { phoneid, } = evt.target.dataset\n\n this.props.DeleteBurnNoticeSubscriberPhone(this.props.burnNoticeSubscriber.BurnNoticeSubscriberId, parseInt(phoneid))\n }\n\n createEmail = (values) => {\n if (values.EmailAddress !== '') {\n this.props.CreateBurnNoticeSubscriberEmail(this.props.burnNoticeSubscriber.BurnNoticeSubscriberId, values)\n }\n }\n\n deleteEmail = () => {\n this.props.DeleteBurnNoticeSubscriberEmail(this.props.burnNoticeSubscriber.BurnNoticeSubscriberId)\n }\n\n async onSaveClick (values) {\n const { burnNoticeSubscriber, isNewBurnNoticeSubscriber, } = this.props\n const {\n BurnNoticeSubscriberFirstName,\n BurnNoticeSubscriberLastName,\n } = values\n \n let BurnNoticeSubscriberId = burnNoticeSubscriber ? burnNoticeSubscriber.BurnNoticeSubscriberId : null\n let newBurnNoticeSubscriber = isNaN(BurnNoticeSubscriberId) || BurnNoticeSubscriberId < 1 || isNewBurnNoticeSubscriber\n\n this.formik.setSubmitting(true)\n\n const timedSubmissionFail = () => {\n setTimeout(() => {\n if(this.formik) {\n this.formik.setSubmitting(false) \n }\n }, 300)\n }\n\n if (newBurnNoticeSubscriber) {\n // validate email address or die\n const emailErrors = await this.EmailForm.validate()\n if (Object.keys(emailErrors).length > 0) {\n this.formik.setSubmitting(false)\n return\n }\n // get email address or die\n const EmailAddress = this.EmailForm.getEmailAddress()\n \n // validate BurnNoticeSubscriber form or die\n const burnNoticeSubscriberIsValid = await this.validateForm()\n if (Object.keys(burnNoticeSubscriberIsValid).length > 0) {\n this.formik.setSubmitting(false)\n return\n }\n\n const burnNoticeSubscriberToSubmit = {\n BurnNoticeSubscriberFirstName,\n BurnNoticeSubscriberLastName,\n }\n // simple email object for Burn Notice Subscriber creation\n const emailToSubmit = { EmailAddress, }\n \n // submit Burn Notice Subscriber and email\n this.props.CreateBurnNoticeSubscriber(burnNoticeSubscriberToSubmit, emailToSubmit)\n timedSubmissionFail()\n return\n }\n\n let emailErrorsExist = false\n if (this.EmailForm) {\n emailErrorsExist = await validateAll([ this.EmailForm, ])\n }\n\n const [\n phoneErrorsExist,\n ] = await Promise.all([\n validateAll(this.PhoneForms),\n ])\n\n let burnNoticeSubscriberErrorsExist = false\n const errors = await this.formik.validateForm()\n burnNoticeSubscriberErrorsExist = Object.keys(errors).length > 0\n\n if (phoneErrorsExist || emailErrorsExist || burnNoticeSubscriberErrorsExist) {\n this.formik.setSubmitting(false)\n scrollToErrors()\n return false\n }\n // Start submitting these since there couple be multiples or dozens\n // and the actions are not batched.\n submitAll(this.PhoneForms)\n \n this.EmailForm.submit()\n\n const updateObj = {\n BurnNoticeSubscriberId,\n BurnNoticeSubscriberFirstName,\n BurnNoticeSubscriberLastName,\n }\n\n this.props.UpdateBurnNoticeSubscriber(updateObj)\n timedSubmissionFail()\n }\n\n touched = () => {\n if (this.formik && this.formik.touched) {\n return Object.values(this.formik.touched).some(t => t === true)\n }\n // unable to check if touched, just return true\n return true\n }\n\n componentDidMount () {\n if (this.props.online) {\n const { GetBurnNoticeSubscriberLookupData, } = this.props\n GetBurnNoticeSubscriberLookupData()\n }\n }\n\n componentDidUpdate (prevProps) {\n const oldBurnNoticeSubscriber = prevProps.burnNoticeSubscriber\n const { burnNoticeSubscriber, } = this.props\n\n // if the Burn Notice Subscriber record loaded in props, get related data\n if (!isEmpty(burnNoticeSubscriber) && !isEqual(oldBurnNoticeSubscriber, burnNoticeSubscriber)) {\n this.AddressForms = []\n this.PhoneForms = []\n }\n\n if (!isEmpty(oldBurnNoticeSubscriber) && isEmpty(burnNoticeSubscriber)) {\n this.AddressForms = []\n this.PhoneForms = []\n }\n }\n\n createBurnNoticeSubscriberPhone = values => {\n this.props.CreateBurnNoticeSubscriberPhone(this.props.burnNoticeSubscriber.BurnNoticeSubscriberId, values)\n }\n\n buildPhones = () => {\n let { phones, } = this.props.phones\n if (!phones || phones.length === 0) {\n return

    No phones found

    \n }\n const { readOnly, } = this.props\n return phones.map(phone => {\n return (\n \n \n \n this.PhoneForms[phone.PhoneId] = node}\n readOnly={readOnly}\n showAuditData={true}\n showActiveControl={true}\n createFn={this.createBurnNoticeSubscriberPhone}\n actionButton={\n !readOnly && \n \n Delete\n \n }\n />\n \n \n \n )\n })\n }\n\n togglePhones = () => {\n this.setState({ phonesAreShowing: !this.state.phonesAreShowing, })\n }\n\n // We're intentionally ignoring the specific errors as the app now\n // scrolls the page to make the inline errors available.\n // eslint-disable-next-line no-unused-vars\n static hasErrors (_errors) {\n scrollToErrors()\n }\n\n setFormikNode = node => this.formik = node\n\n validationSchema = BurnNoticeSubscriber.getValidationSchema()\n\n render () {\n const { burnNoticeSubscriber, email, } = this.props\n\n const {\n showEmails,\n showAuditData,\n showPhones,\n readOnly,\n isNewBurnNoticeSubscriber,\n phones,\n disableDeleteEmail,\n inactiveData,\n } = this.props\n\n let initialValues = {\n ...burnNoticeSubscriber,\n }\n\n return (\n \n {({ values, errors, isSubmitting, dirty, }) => (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n showEmails &&\n \n this.EmailForm = node}\n isEmailRequired={true}\n showDelete={disableDeleteEmail ? false : readOnly}\n deleteFn={this.deleteEmail}\n />\n \n }\n \n {\n showPhones && burnNoticeSubscriber && !isNewBurnNoticeSubscriber && <>\n \n \n \n \n \n \n \n \n

    Phones

    \n { this.props.readOnly ? null : \n \n Add\n \n }\n {\n 'Phones' in inactiveData &&\n \n {\n stopEvent(e)\n this.props.SetInactiveMetadata('Phones', true)\n }}\n />\n {\n stopEvent(e)\n this.props.SetInactiveMetadata('Phones', false)\n }}\n />\n \n }\n \n
    \n { this.buildPhones() }\n
    \n \n }\n {\n !this.props.readOnly &&\n \n \n {\n showAuditData && burnNoticeSubscriber && !isNewBurnNoticeSubscriber &&
    \n \n
    \n }\n\n \n \n
    \n }\n \n )}\n \n )\n }\n}\n\nfunction mapStateToProps (state, props) {\n \n /** @type {Number} `props.burnNoticeSubscriberId` by default, otherwise `burnNoticeSubscriber.BurnNoticeSubscriberId` */\n let burnNoticeSubscriberId = props.BurnNoticeSubscriberId\n const { burnNoticeSubscriber, } = props\n if (!burnNoticeSubscriberId && burnNoticeSubscriber && burnNoticeSubscriber.BurnNoticeSubscriberId) {\n burnNoticeSubscriberId = burnNoticeSubscriber.BurnNoticeSubscriberId\n }\n\n const inactiveData = burnNoticeSubscriberInactiveData(state)\n\n const { online, } = state.offline\n return {\n online,\n inactiveData,\n }\n}\n\nconst mapDispatchToProps = {\n CreateBurnNoticeSubscriber : BurnNoticeSubscriberActions.createBurnNoticeSubscriber,\n CreateLocalPhoneForBurnNoticeSubscriber : BurnNoticeSubscriberActions.createLocalPhoneForBurnNoticeSubscriber,\n CreateBurnNoticeSubscriberPhone : BurnNoticeSubscriberActions.createBurnNoticeSubscriberPhone,\n DeleteBurnNoticeSubscriberPhone : BurnNoticeSubscriberActions.deleteBurnNoticeSubscriberPhone,\n CreateBurnNoticeSubscriberEmail : BurnNoticeSubscriberActions.createBurnNoticeSubscriberEmail,\n DeleteBurnNoticeSubscriberEmail : BurnNoticeSubscriberActions.deleteBurnNoticeSubscriberEmail,\n UpdateBurnNoticeSubscriber : BurnNoticeSubscriberActions.updateBurnNoticeSubscriber,\n GetBurnNoticeSubscriberLookupData : BurnNoticeSubscriberActions.getBurnNoticeSubscriberLookupData,\n SetInactiveMetadata : BurnNoticeSubscriberActions.setInactiveMetadata,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(BurnNoticeSubscriberForm)","import { createSelector, } from 'reselect'\n\n// Map Layers\nimport DEFAULT_FEATURE_LAYERS from '../config/map/featureLayers'\nimport DEFAULT_GEOJSON_LAYERS from '../config/map/geojsonLayers'\n\n\n\n/*** State Selectors */\n\nconst mapState = state => state.Map || {}\n\nexport const mapStateSelector = createSelector(\n mapState,\n state => state\n)\n\nexport const latLongSelector = createSelector(\n mapStateSelector,\n state => ({ ...state.LatLong, })\n)\n\nexport const layerConfigsSelector = createSelector(\n mapState,\n state => {\n return state.componentLayerConfigs || []\n }\n)\n\nconst featureLayerIds = () => DEFAULT_GEOJSON_LAYERS\n .map(l => {\n const layer = l()\n return { Text: layer.title, Value: layer.id, readOnly: false, }\n })\n\nconst featureLayersSelector = createSelector(\n featureLayerIds,\n layerIds => layerIds\n)\n\nconst geojsonLayerIds = () => DEFAULT_FEATURE_LAYERS\n .map(l => ({ Text: l.title, Value: l.id, readOnly: false, }))\n\nconst geojsonLayersSelector = createSelector(\n geojsonLayerIds,\n layerIds => layerIds\n)\n\nexport const mapLayerIdsSelector = createSelector(\n featureLayersSelector,\n geojsonLayersSelector,\n (featureLayerIds, geojsonLayerIds) => []\n .concat(\n featureLayerIds.reverse(),\n geojsonLayerIds.reverse(),\n )\n // Create a copy of the items so any mutatation do not leak across calls to this selectors\n .map(l => ({ ...l, }))\n)\n\nconst activeMapIdSelector = createSelector(\n mapStateSelector,\n state => state.activeMapId\n)\n\nexport const hiddenLayerIdsSelector = createSelector(\n layerConfigsSelector,\n activeMapIdSelector,\n (layerConfigs, configName) => {\n const config = layerConfigs.find(c => c.name === configName)\n if (!config) {\n return []\n }\n return [ ...config.hiddenLayers, ]\n }\n)\n","import { createSelector, } from 'reselect'\r\n\r\nconst geoState = (state) => state.GeoCoordinate\r\n\r\nexport const geoStateSelector = createSelector(\r\n geoState,\r\n (state) => state\r\n)\r\n\r\nconst geoLocationSelector = createSelector(\r\n geoStateSelector,\r\n ({ geocodedLocation, }) => geocodedLocation,\r\n)\r\n\r\nexport const geoLocationFormSelector = createSelector(\r\n geoLocationSelector,\r\n (features) => {\r\n return Object.entries(features).reduce((acc, curr) => {\r\n const [ k, ] = curr\r\n const f = features[k]\r\n if (!f || !f.layerId) {\r\n return acc\r\n }\r\n acc.push(f)\r\n return acc\r\n }, [])\r\n }\r\n)","\n\nconst retry = (fn, par, ms) => {\n return new Promise((resolve) => {\n setTimeout(() => resolve(fn(par)), ms)\n })\n}\n\nexport default retry","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { number, object, bool, func, array, string, oneOfType, } from 'prop-types'\r\nimport { isEqual, isEmpty, } from 'lodash'\r\nimport { Formik, Field, } from 'formik'\r\nimport { Col, FormGroup, Label, Row, Popover, PopoverBody, } from 'reactstrap'\r\n\r\n// Components\r\nimport Effect from '../Effect'\r\nimport ValidatingField from '../FormControls/ValidatingField'\r\n\r\n// Actions\r\nimport BurnPermitLocationActions from '../../redux/BurnPermitLocationRedux'\r\nimport MapActions from '../../redux/MapRedux'\r\nimport GeoCoordinateTypes from '../../redux/GeoCoordinateRedux'\r\n\r\n// Models\r\nimport BurnPermitLocation from '../../models/BurnPermitLocation'\r\n\r\n// Selectors\r\nimport { mapStateSelector, } from '../../selectors/mapSelectors'\r\nimport { geoStateSelector, } from '../../selectors/geoSelectors'\r\nimport { networkStateSelector, permitLocationByIdSelector, } from '../../selectors/selectors'\r\n\r\n// Map\r\nimport { TRS, FIRE_DISTRICTS, COUNTIES, REGIONS, } from '../../config/map/featureLayers'\r\n\r\n// Utilities\r\nimport retry from '../../utilities/retry'\r\n\r\n// These are layers that should be shown upon click of the GeoLocation button so that\r\n// their values can be derived from the lat/long and populate their respective forms\r\nconst LAYERS_TO_SHOW = [ TRS.id, FIRE_DISTRICTS.id, COUNTIES.id, REGIONS.id, ]\r\n\r\n/**\r\n * @class GeoCoordinateForm\r\n * @description\r\n * Elements have these names:\r\n * 'Latitude',\r\n * 'Longitude',\r\n */\r\nclass GeoCoordinateForm extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n this.validateForm = this.validateForm.bind(this)\r\n this.validationSchema = BurnPermitLocation.getValidationSchema({ latLong: true, })\r\n this.hasValues = this.hasValues.bind(this)\r\n this.onBlur = this.onBlur.bind(this)\r\n }\r\n\r\n static propTypes = {\r\n UpdateLatLong : func,\r\n SetLatLong : func,\r\n ShowLayer : func,\r\n MapLatitude : oneOfType([ number, string, ]),\r\n MapLongitude : oneOfType([ number, string, ]),\r\n permitLocation : object,\r\n hiddenLayerIds : array,\r\n BurnPermitLocationId : number,\r\n MapGetLatLong : func,\r\n GetLatLongFromMap : bool,\r\n onChange : func,\r\n readOnly : bool,\r\n setMapLatLong : func,\r\n Geocode : func,\r\n online : bool,\r\n }\r\n\r\n static defaultProps = { readOnly: false, }\r\n\r\n state = {\r\n latLongPopoverMessage : '',\r\n latLongPopoverOpen : false,\r\n \r\n }\r\n\r\n componentDidMount () {\r\n const { permitLocation, } = this.props\r\n if (!isEmpty(permitLocation)) {\r\n const { Latitude, Longitude, } = permitLocation\r\n this.props.SetLatLong(Latitude, Longitude)\r\n }\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.MapGetLatLong(false, false)\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const {\r\n permitLocation,\r\n GetLatLongFromMap,\r\n MapLatitude,\r\n MapLongitude,\r\n SetLatLong,\r\n } = this.props\r\n\r\n // This handles if the lat/long was updated on the server and then the local state\r\n // is updated after a fetch returns the new data\r\n if (!isEmpty(prevProps.permitLocation) && !isEmpty(permitLocation) && !isEqual(prevProps.permitLocation, permitLocation)) {\r\n const latitude = permitLocation.Latitude\r\n const longitude = permitLocation.Longitude\r\n this.props.setMapLatLong({\r\n mapPoint: {\r\n latitude,\r\n longitude,\r\n },\r\n })\r\n SetLatLong(latitude, longitude)\r\n this.validateForm()\r\n return\r\n }\r\n\r\n // If we're getting the values from the map, check them against what the form is tracking\r\n if (GetLatLongFromMap && !!this.formik) {\r\n const { Latitude: formLat, Longitude: formLong, } = this.formik.values\r\n const LatLong = { Latitude: MapLatitude, Longitude: MapLongitude, }\r\n const latLongHasNewValues = Object.values(LatLong).filter(l => l).length && !isEqual({ Latitude: formLat, Longitude: formLong, }, LatLong)\r\n // If they're different, update the form\r\n if (latLongHasNewValues) {\r\n this.setState({ latLongPopoverMessage: 'Click the button when you have found the lat / long you desire', }, () => {\r\n this.formik.setValues(LatLong)\r\n this.formik.setTouched({ Latitude: true, Longitude: true, })\r\n })\r\n }\r\n }\r\n }\r\n\r\n async validateForm (force) {\r\n if (!this.formik) {\r\n return await retry(this.validateForm, force, 100)\r\n }\r\n this.formik.setFieldValue('Force', force || false)\r\n const formKeys = Object.keys(this.formik.values)\r\n for (let i = 0, len = formKeys.length; i < len; i++) {\r\n this.formik.setFieldTouched(formKeys[i])\r\n }\r\n return await this.formik.validateForm()\r\n }\r\n\r\n resetForm = () => {\r\n this.formik.resetForm()\r\n }\r\n\r\n submitForm = () => {\r\n this.setState({\r\n latLongPopoverOpen : false,\r\n latLongPopoverMessage : '',\r\n })\r\n this.formik.submitForm()\r\n this.props.MapGetLatLong(false, false)\r\n }\r\n\r\n getLatLongFromMap = () => {\r\n const isOpen = !this.state.latLongPopoverOpen\r\n this.setState({\r\n latLongPopoverOpen : isOpen,\r\n latLongPopoverMessage : 'Click the map to set the Lat / Long values',\r\n }, () => {\r\n let id\r\n for (let i = 0, len = LAYERS_TO_SHOW.length; i < len; i++) {\r\n id = LAYERS_TO_SHOW[i]\r\n if (this.props.hiddenLayerIds.includes(id)) {\r\n this.props.ShowLayer(id)\r\n }\r\n }\r\n this.props.MapGetLatLong(isOpen, isOpen)\r\n })\r\n }\r\n\r\n onChange = (changedEntries) => {\r\n if (!this.formik) {\r\n setTimeout(() => this.onChange(changedEntries), 100)\r\n return\r\n }\r\n const { Latitude, Longitude, } = this.formik.values\r\n if (!Latitude || !Longitude) {\r\n this.props.SetLatLong(null, null)\r\n }\r\n if (typeof this.props.onChange === 'function') {\r\n this.props.onChange(changedEntries)\r\n }\r\n if (Object.keys(this.formik.errors).length > 0) {\r\n // If there are any errors, make sure both inputs are touched\r\n // so that all validation messages will show immediately\r\n const formKeys = Object.keys(this.formik.values)\r\n for (let i = 0, len = formKeys.length; i < len; i++) {\r\n this.formik.setFieldTouched(formKeys[i])\r\n }\r\n }\r\n }\r\n\r\n submit = values => {\r\n const { BurnPermitLocationId, } = this.props\r\n\r\n if (BurnPermitLocationId) {\r\n const {\r\n Latitude,\r\n Longitude,\r\n } = values\r\n const latLongInfo = {\r\n Latitude,\r\n Longitude,\r\n BurnPermitLocationId,\r\n }\r\n this.props.UpdateLatLong(latLongInfo)\r\n }\r\n }\r\n\r\n hasValues () {\r\n if (!this.formik) {\r\n setTimeout(() => this.hasValues(), 100)\r\n return\r\n }\r\n const { Latitude, Longitude, } = this.formik.values\r\n\r\n // If the user enters a value in one or more inputs, but then clears them, `dirty` will return false\r\n return !!Latitude && !!Longitude\r\n }\r\n\r\n onBlur () {\r\n // If the form hasn't been touched or the user is using the map exit early\r\n if (!this.formik || !this.formik.touched || this.props.GetLatLongFromMap || !this.props.online) {\r\n return\r\n }\r\n \r\n // validate the form with force = true to see if we should geocode\r\n this.formik\r\n .validateForm({\r\n ...this.formik.values,\r\n Force: true,\r\n })\r\n .then((errors) => {\r\n if (!isEmpty(errors)) {\r\n return\r\n }\r\n const { Latitude, Longitude, } = this.formik.values\r\n if (!Latitude || !Longitude) {\r\n return\r\n }\r\n // call the geocode method\r\n this.props.Geocode(Latitude,Longitude)\r\n // make the map display the typed lat long\r\n this.props.setMapLatLong({ \r\n mapPoint: {\r\n latitude : Latitude,\r\n longitude : Longitude,\r\n },\r\n })\r\n })\r\n .catch(err => console.error('An error occurred validating the address form', err))\r\n }\r\n\r\n setFormikNode = node => this.formik = node\r\n\r\n render () {\r\n const { readOnly, } = this.props\r\n const { Latitude, Longitude, } = this.props.permitLocation\r\n const btnLabelClass = `btn btn-light ${this.props.GetLatLongFromMap ? 'active' : ''}`\r\n return (\r\n \r\n {({ values, }) => (\r\n <>\r\n \r\n \r\n \r\n

    To auto-populate the Lat/Long, Legal Description, Region, County, and Fire District from the Map below, you must first zoom in close to your burn location.

    \r\n

    Then, click the Globe button on the right, then click on the map to record the location of your burn location.

    \r\n

    You may have to click the map twice.

    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {!readOnly && \r\n \r\n
    \r\n \r\n
    \r\n \r\n {this.state.latLongPopoverMessage}\r\n \r\n \r\n }\r\n
    \r\n \r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { online, } = networkStateSelector(state)\r\n const { GetLatLongFromMap, LatLong, hiddenLayerIds, } = mapStateSelector(state)\r\n const { IsGeocoding, geocodedLocation, geocodingLocation, } = geoStateSelector(state)\r\n const permitLocation = permitLocationByIdSelector(state, props.BurnPermitLocationId)\r\n\r\n return {\r\n hiddenLayerIds,\r\n permitLocation,\r\n GetLatLongFromMap,\r\n MapLatitude : LatLong.Latitude,\r\n MapLongitude : LatLong.Longitude,\r\n IsGeocoding,\r\n geocodedLocation,\r\n geocodingLocation,\r\n online,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n UpdateLatLong : BurnPermitLocationActions.updateBurnPermitLocationLatLong,\r\n MapGetLatLong : MapActions.getLatLongFromMap,\r\n SetLatLong : MapActions.setLatLong,\r\n ShowLayer : MapActions.showLayer,\r\n Geocode : GeoCoordinateTypes.geocodeLocationSection,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(GeoCoordinateForm)\r\n","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { isEqual, isEmpty, } from 'lodash'\nimport { Row, Col, FormGroup, Label, Button, Card, CardBody, Fade, ListGroupItem, ListGroup, ButtonGroup, } from 'reactstrap'\nimport { Formik, Form, Field, } from 'formik'\nimport { object, bool, array, func, } from 'prop-types'\nimport * as Yup from 'yup'\n\n// Selectors\nimport {\n contactMethodsForSelectSelector,\n alertMethodsSelector,\n alertPreferencesSelect,\n} from '../../selectors/selectors'\nimport {\n personTypesForPerson,\n personIsDnrSelector,\n personIsAgentOrAgencyPerson,\n personTypesByPermissionSelector,\n personInactiveData,\n} from '../../selectors/personSelectors'\nimport { userSelector, userPersonIdSelector, } from '../../selectors/userSelectors'\nimport { regionsForSelectSelector, } from '../../selectors/regionSelectors'\nimport { agenciesForSelectSelector, } from '../../selectors/agencySelectors'\nimport {\n userCanViewPersonRegion,\n userCanUpdatePersonRegion,\n userCanChangeAlertPrefs,\n userCanEditVerifiedAgentPersonType,\n userCanVerifyAgents,\n userCanChangeSMDecisionStatus,\n} from '../../selectors/permissionSelectors'\n\n// Components\nimport AddressForm from './AddressForm'\nimport PhoneForm from './PhoneForm'\nimport EmailForm from './EmailForm'\nimport Effect from '../Effect'\nimport AuditData from '../AuditData'\nimport ConfirmationModal from '../ConfirmationModal'\nimport {\n AutoComplete,\n PopoverButton,\n ValidatingField,\n RowToggler,\n Select,\n YesNoRadioButtonGroup,\n RequiredLabel,\n ButtonGroupButton,\n} from '../FormControls'\n\n// Actions\nimport UiActions from '../../redux/UiRedux'\nimport ApiActions from '../../redux/ApiRedux'\nimport AppActions from '../../redux/AppRedux'\nimport PersonActions from '../../redux/PersonRedux'\nimport RegionActions from '../../redux/RegionsRedux'\nimport AgencyActions from '../../redux/AgencyRedux'\nimport MergeActions from '../../redux/MergeRedux'\n\n// Models\nimport Person from '../../models/Person'\n\n// Utilities\nimport { dateFormatter, objHasProp, scrollToErrors, } from '../../utilities'\nimport stopEvent from '../../utilities/stopEvent'\nimport { validateAll, submitAll, } from '../../utilities/forms'\n\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SUPPORT_EMAIL, } = process.env\nconst VERIFY_AGENCY_USER = 'verify_agency_user'\nconst CONVERT_TO_AGENCY = 'CONVERT_TO_AGENCY'\n\n\nclass PersonForm extends React.Component {\n\n constructor (props) {\n super(props)\n\n this.onSaveClick = this.onSaveClick.bind(this)\n }\n\n AddressForms = []\n PhoneForms = []\n EmailForm = null\n\n static propTypes = {\n // actions\n OpenModal : func,\n Failure : func,\n RedirectTo : func,\n CreatePerson : func,\n CreateLocalAddressForPerson : func,\n CreatePersonAddress : func,\n DeletePersonAddress : func,\n CreateLocalPhoneForPerson : func,\n CreatePersonPhone : func,\n DeletePersonPhone : func,\n CreatePersonEmail : func,\n DeletePersonEmail : func,\n SetPersonRegion : func,\n UpdatePerson : func,\n UpdatePersonRegion : func,\n GetPersonLookupData : func,\n SetInactiveMetadata : func,\n GetAllRegions : func,\n GetAllAgencies : func,\n VerifyAgencyUser : func,\n ConvertPersonToAgency : func,\n SetMergeObjectOneId : func,\n // own props\n online : bool,\n user : object,\n inactiveData : object,\n showAddresses : bool,\n addresses : object,\n showPhones : bool,\n phones : object,\n showEmails : bool,\n disableDeleteEmail : bool,\n email : object,\n region : object,\n agency : object,\n alertPrefs : object,\n showAuditData : bool,\n readOnly : bool,\n person : object,\n shouldGeocode : bool,\n showTypes : bool,\n deletePhoneAction : func,\n deleteAddressAction : func,\n personIsDnr : bool,\n isNewPerson : bool,\n isAgent : bool,\n isStateGovCust : bool,\n showAlertPrefs : bool,\n showRegion : bool,\n enableAgencyConversion : bool,\n disableMerge : bool,\n // selectors\n personTypes : array,\n contactMethods : array,\n agencies : array,\n regions : array,\n AlertMethods : array,\n AlertPreferences : array,\n canChangeAlertPrefs : bool,\n canUpdateRegion : bool,\n canEditAgentPersonType : bool,\n canVerifyAgents : bool,\n canViewPersonRegion : bool,\n canSetSMDecisionStatus : bool,\n }\n \n static defaultProps = {\n readOnly : false,\n showTypes : false,\n showAuditData : true,\n personIsDnr : false,\n isAgent : false,\n agencies : [],\n regions : [],\n AlertMethods : [],\n showAlertPrefs : true,\n showRegion : true,\n canChangeAlertPrefs : false,\n canUpdateRegion : false,\n canEditAgentPersonType : false,\n canVerifyAgents : false,\n canViewPersonRegion : false,\n canSetSMDecisionStatus : false,\n disableMerge : false,\n }\n\n state = {\n hideVerifyButton : false,\n addressesAreShowing : false,\n phonesAreShowing : false,\n alertPrefsAreShowing : false,\n }\n\n validateForm = async () => {\n // Dunno why, but had an error thrown here saying could not call\n // validateForm of object null\n if (!this.formik) {\n return false\n }\n return await this.formik.validateForm()\n }\n\n onAddAddressClick = (e) => {\n stopEvent(e)\n\n this.props.CreateLocalAddressForPerson(this.props.person.PersonId)\n }\n\n onDeleteAddressClick = e => {\n stopEvent(e)\n\n const { addressid, } = e.target.dataset\n\n const { deleteAddressAction, } = this.props\n\n if (typeof deleteAddressAction === 'function') {\n deleteAddressAction(parseInt(addressid))\n }\n else {\n this.props.DeletePersonAddress(this.props.person.PersonId, parseInt(addressid))\n }\n }\n\n onAddPhoneClick = evt => {\n stopEvent(evt)\n\n this.props.CreateLocalPhoneForPerson(this.props.person.PersonId)\n }\n\n onDeletePhoneClick = evt => {\n stopEvent(evt)\n\n const { phoneid, } = evt.target.dataset\n\n const { deletePhoneAction, } = this.props\n\n if (typeof deletePhoneAction === 'function') {\n deletePhoneAction(parseInt(phoneid))\n }\n else {\n this.props.DeletePersonPhone(this.props.person.PersonId, parseInt(phoneid))\n }\n }\n\n createEmail = (values) => {\n if (values.EmailAddress !== '') {\n this.props.CreatePersonEmail(this.props.person.PersonId, values)\n }\n }\n\n deleteEmail = () => {\n this.props.DeletePersonEmail(this.props.person.PersonId)\n }\n\n validateAlertPrefs = () => {\n if (!this.formik) {\n return false\n }\n const { AlertMethods, phones, } = this.props\n const textableMethods = AlertMethods.filter(m => m.Text === 'SMS Text' || m.Text === 'Both').map(m => m.Value)\n const prefs = Object.entries(this.formik.values)\n .filter(x => x[0].indexOf('PersonAlertPreferenceXref_') > -1)\n .map(x => x[1])\n\n if (!prefs.length) {\n return true\n }\n \n // For some reason formik can't handle value properties that are objects, so we'll manage the errors ourselves.\n const hasAlertablePhone = phones.phones.filter(p => p.ReceivesAlerts).length > 0\n const newErrorState = {}\n for (let i = 0, len = prefs.length; i < len; i++) {\n const pref = prefs[i]\n const prefId = pref.AlertPreferenceId\n const fieldName = `PersonAlertPreferenceXref_${prefId}_Error`\n let errorMsg = ''\n if (!hasAlertablePhone && textableMethods.includes(pref.AlertMethodId)) {\n errorMsg = 'You not will receive these alerts via SMS Texts until you create a Mobile Phone set to Receive Alerts.'\n }\n newErrorState[fieldName] = errorMsg\n }\n this.setState(newErrorState)\n }\n\n async onSaveClick (values) {\n const { person, personIsDnr, isNewPerson, } = this.props\n const {\n PersonFirstName,\n PersonMiddleName,\n PersonLastName,\n PersonTypeId,\n ContactMethodId,\n RegionId,\n MakesSmokeManagementDecisions,\n } = values\n \n let PersonId = person ? person.PersonId : null\n let newPerson = isNaN(PersonId) || PersonId < 1 || isNewPerson\n\n this.formik.setSubmitting(true)\n\n const timedSubmissionFail = () => {\n setTimeout(() => {\n if(this.formik) {\n this.formik.setSubmitting(false) \n }\n }, 300)\n }\n\n const PersonAlertPreferenceXref = Object.entries(this.formik.values)\n .filter(x => x[0].indexOf('PersonAlertPreferenceXref_') > -1)\n .reduce((acc, x, idx) => {\n acc[idx] = x[1]\n return acc\n }, [])\n .filter(x => x.AlertMethodId)\n\n if (newPerson) {\n // validate email address or die\n const emailErrors = await this.EmailForm.validate()\n if (Object.keys(emailErrors).length > 0) {\n this.formik.setSubmitting(false)\n return\n }\n // get email address or die\n const EmailAddress = this.EmailForm.getEmailAddress()\n \n // validate person form or die\n const personIsValid = await this.validateForm()\n if (Object.keys(personIsValid).length > 0) {\n this.formik.setSubmitting(false)\n return\n }\n\n const personToSubmit = {\n PersonFirstName,\n PersonMiddleName,\n PersonLastName,\n PersonTypeId,\n ContactMethodId,\n PersonAlertPreferenceXref,\n }\n // simple email object for person creation\n const emailToSubmit = { EmailAddress, }\n \n // submit person and email\n this.props.CreatePerson(personToSubmit, emailToSubmit)\n timedSubmissionFail()\n return\n }\n\n let emailErrorsExist = false\n if (person.IsUser === false && this.EmailForm) {\n emailErrorsExist = await validateAll([ this.EmailForm, ])\n }\n\n const [\n addressErrorsExist,\n phoneErrorsExist,\n ] = await Promise.all([\n validateAll(this.AddressForms),\n validateAll(this.PhoneForms),\n ])\n\n let personErrorsExist = false\n const errors = await this.formik.validateForm()\n personErrorsExist = Object.keys(errors).length > 0\n\n if (addressErrorsExist || phoneErrorsExist || emailErrorsExist || personErrorsExist) {\n this.formik.setSubmitting(false)\n scrollToErrors()\n return false\n }\n // Start submitting these since there couple be multiples or dozens\n // and the actions are not batched.\n submitAll(this.AddressForms)\n submitAll(this.PhoneForms)\n \n if (person.IsUser === false) {\n this.EmailForm.submit()\n }\n\n // update region information for staff\n if (this.props.showRegion && this.props.canUpdateRegion && personIsDnr) {\n const makesDecisions = MakesSmokeManagementDecisions === 'yes'\n\n if (Number.isInteger(parseInt(RegionId)) && parseInt(RegionId) > 0) {\n if (Number.isInteger(this.props.region.PersonRegionXrefId)) {\n this.props.UpdatePersonRegion(person.PersonId, RegionId, makesDecisions)\n }\n else {\n this.props.SetPersonRegion(person.PersonId, RegionId, makesDecisions)\n }\n }\n }\n\n const updateObj = {\n PersonTypeId,\n ContactMethodId,\n PersonAlertPreferenceXref,\n PersonId,\n }\n\n if (person.IsUser === false) {\n updateObj.PersonFirstName = PersonFirstName\n updateObj.PersonMiddleName = PersonMiddleName\n updateObj.PersonLastName = PersonLastName\n }\n\n if (values.Agency && values.Agency.AgencyId) {\n updateObj.PersonAgencyXref = [ { PersonAgencyXrefAgencyId: values.Agency.AgencyId, PersonAgencyXrefPersonId: person.PersonId, }, ]\n // reset the state when saving\n this.setState({ hideVerifyButton: false, })\n }\n\n this.props.UpdatePerson(updateObj)\n timedSubmissionFail()\n }\n\n renderPersonTypes = (values) => {\n let { readOnly, canEditAgentPersonType, personIsDnr, personTypes, } = this.props\n\n if (canEditAgentPersonType) {\n readOnly = false\n }\n else if (values.Agency && objHasProp(values.Agency, 'ConfirmedBy') && !personIsDnr) {\n readOnly = !!values.Agency.ConfirmedBy\n }\n\n // If there's only one value, select it by default\n if (personTypes.length === 1) {\n values.PersonTypeId = personTypes[0].Value\n }\n \n return \n \n \n Person Type\n \n
  • \n Private - You conduct burns on property that you personally own\n
  • \n
  • \n Agent - You own or work for a company that conducts burns on \n property you are authorized to burn on
  • \n
  • \n Government Agency - You work for local, state, or federal entity that is \n conducts burns on property you are authorized to burn on
  • \n \n }\n />\n
    \n \n {({ field, form, }) => (\n \n )}\n \n
    \n \n }\n\n touched = () => {\n if (this.formik && this.formik && this.formik.touched) {\n return Object.values(this.formik.touched).some(t => t === true)\n }\n // unable to check if touched, just return true\n return true\n }\n\n renderContactMethod = () => {\n return \n \n \n Preferred Contact Method\n \n \n \n {({ field, form, }) => (\n \n )}\n \n \n \n }\n\n renderRegion = () => {\n const {\n canViewPersonRegion,\n personIsDnr,\n regions,\n readOnly,\n showRegion,\n canSetSMDecisionStatus,\n } = this.props\n if (!showRegion || !(canViewPersonRegion && personIsDnr)) {\n return null\n }\n return <>\n \n \n \n {({ field, form, }) => (\n \n )}\n \n \n \n {\n canSetSMDecisionStatus && \n \n \n {({ field, form, }) => (\n \n )}\n \n \n \n }\n \n }\n\n verifyUserClick = e => {\n stopEvent(e)\n this.props.OpenModal(VERIFY_AGENCY_USER)\n }\n\n renderAgencies = (currFormValues) => {\n const { personTypes, isAgent, canEditAgentPersonType, } = this.props\n\n if (!Array.isArray(personTypes) || !isAgent) {\n return null\n }\n\n const { agencies, person, } = this.props\n let { readOnly, } = this.props\n\n if (canEditAgentPersonType) {\n readOnly = false\n }\n else if (currFormValues.Agency && objHasProp(currFormValues.Agency, 'ConfirmedBy') && !this.props.personIsDnr) {\n readOnly = !!currFormValues.Agency.ConfirmedBy\n }\n\n const mailToHref =`mailto:${REACT_APP_SUPPORT_EMAIL}?Subject=New Burn Portal Agency&Body=Hey Burn Portal%0D%0A%0D%0AThis is ${this.props.user.userName} and I need my Agency added to the Burn Portal.`\n\n return <>\n \n \n {\n if (value !== currFormValues.Agency.AgencyId) {\n this.setState({ hideVerifyButton: true, })\n }\n }}\n />\n \n \n
    \n { \n !this.props.readOnly\n ? !isEmpty(currFormValues.Agency) && currFormValues.Agency.AgencyId && this.state.hideVerifyButton === false\n ? <>\n { currFormValues.Agency.ConfirmedBy ? <>\n Verified By: {currFormValues.Agency.ConfirmedBy}
    \n Verified On: {dateFormatter(currFormValues.Agency.ConfirmedOn, 'MM-DD-YYYY hh:mm:ss a')}\n \n : this.props.canVerifyAgents\n ? <>\n \n Verify User\n \n View Agency\n \n : <>Verification Pending.
    You are unable to create or manage Burn Permits, Burn Requests or Post Burn data until your account is verified.\n }\n Are you sure {currFormValues.PersonFirstName} {currFormValues.PersonLastName} is part of {currFormValues.Agency.AgencyName}?

    }\n submitAction={this.props.VerifyAgencyUser}\n submitArgs={[ currFormValues.Agency.AgencyId, currFormValues.Agency.PersonAgencyXrefId, ]}\n />\n \n : Don't see your Agency? Email us and we'll set you up!\n : null\n }\n
    \n \n \n }\n\n componentDidMount () {\n if (this.props.online) {\n const { personIsDnr, GetPersonLookupData, GetAllRegions, GetAllAgencies, readOnly, isAgent, canViewPersonRegion, } = this.props\n GetPersonLookupData()\n if (!readOnly && isAgent) {\n GetAllAgencies()\n }\n\n if (this.props.showRegion && canViewPersonRegion && personIsDnr) {\n GetAllRegions()\n }\n }\n }\n\n componentDidUpdate (prevProps) {\n\n const oldPerson = prevProps.person\n const { person, canViewPersonRegion, personIsDnr, isAgent, readOnly, showRegion, } = this.props\n\n // if the person record loaded in props, get related data\n if (!isEmpty(person) && !isEqual(oldPerson, person)) {\n this.AddressForms = []\n this.PhoneForms = []\n this.validateAlertPrefs()\n }\n\n if (!isEmpty(oldPerson) && isEmpty(person)) {\n this.AddressForms = []\n this.PhoneForms = []\n }\n\n if (!readOnly && !prevProps.isAgent && isAgent) {\n this.props.GetAllAgencies()\n }\n\n if ((!prevProps.canViewPersonRegion || !prevProps.personIsDnr || !prevProps.showRegion) \n && (canViewPersonRegion && personIsDnr && showRegion)) {\n this.props.GetAllRegions()\n }\n }\n\n onAlertPrefChange = evt => {\n stopEvent(evt)\n const { id, value, name, dataset, } = evt.target\n const { xrefId, } = dataset\n const pref = {\n PersonAlertPreferenceXrefId : parseInt(xrefId),\n AlertMethodId : parseInt(value),\n AlertPreferenceId : parseInt(id),\n }\n this.formik.setFieldValue(name, pref)\n }\n\n buildAlertMethods = prefId => {\n if (!this.formik) {\n return\n }\n const name = `PersonAlertPreferenceXref_${prefId}`\n const selectedPref = this.formik.values[name]\n let selectedMethod = '', xrefId = 0\n if (selectedPref) {\n selectedMethod = selectedPref.AlertMethodId\n xrefId = selectedPref.PersonAlertPreferenceXrefId\n }\n return \n \n {({ field, }) => (\n \n )}\n \n \n }\n\n buildAlertPrefItem = p => {\n return \n \n \n

    {p.AlertPreferenceName}

    \n

    \n {p.AlertPreferenceDescription}\n

    \n \n { this.buildAlertMethods(p.AlertPreferenceId) }\n
    \n
    \n }\n\n buildAlertPrefGroup = pref => {\n return this.props.AlertPreferences\n .filter(p => p.AlertPreferenceName.indexOf(pref) > -1)\n .map(this.buildAlertPrefItem)\n }\n\n buildAlertPrefs = () => {\n const permitPrefs = this.buildAlertPrefGroup('Burn Permit')\n const requestPrefs = this.buildAlertPrefGroup('Burn Request')\n // There are non configured at this time\n const postBurnPrefs = this.buildAlertPrefGroup('Post Burn')\n return <>\n {\n permitPrefs.length > 0 && \n \n Burn Permit Events\n { permitPrefs }\n \n }\n {\n requestPrefs.length > 0 &&\n \n Burn Request Events\n { requestPrefs }\n \n }\n {\n postBurnPrefs.length > 0 &&\n \n Post Burn Events\n { postBurnPrefs }\n \n }\n \n }\n\n createPersonAddress = values => {\n this.props.CreatePersonAddress(this.props.person.PersonId, values)\n }\n\n buildAddresses = () => {\n let { addresses, } = this.props.addresses\n if (!addresses || addresses.length === 0) {\n return

    No addresses found

    \n }\n const { readOnly, shouldGeocode, } = this.props\n return addresses.map(address => {\n return (\n \n \n \n this.AddressForms[address.AddressId] = node}\n readOnly={readOnly}\n showAuditData={true}\n showActiveControl={true}\n validateStrict={true}\n createFn={this.createPersonAddress}\n actionButton={readOnly ? null : \n \n Delete\n \n }\n />\n \n \n \n )\n })\n }\n\n createPersonPhone = values => {\n this.props.CreatePersonPhone(this.props.person.PersonId, values)\n }\n\n buildPhones = () => {\n let { phones, } = this.props.phones\n if (!phones || phones.length === 0) {\n return

    No phones found

    \n }\n const { readOnly, } = this.props\n return phones.map(phone => {\n return (\n \n \n \n this.PhoneForms[phone.PhoneId] = node}\n readOnly={readOnly}\n showAuditData={true}\n showActiveControl={true}\n createFn={this.createPersonPhone}\n actionButton={\n !readOnly && \n \n Delete\n \n }\n />\n \n \n \n )\n })\n }\n\n addRegionValidation = (schema) => {\n return schema.shape({\n RegionId: Yup.number()\n .min(1, 'Please select a region')\n .required('Please select a region'),\n })\n }\n\n toggleAddresses = () => {\n this.setState({ addressesAreShowing: !this.state.addressesAreShowing, })\n }\n\n togglePhones = () => {\n this.setState({ phonesAreShowing: !this.state.phonesAreShowing, })\n }\n\n toggleAlertPrefs = () => {\n this.setState({ alertPrefsAreShowing: !this.state.alertPrefsAreShowing, })\n }\n\n onFormChange = () => {\n this.validateAlertPrefs()\n }\n\n // We're intentionally ignoring the specific errors as the app now\n // scrolls the page to make the inline errors available.\n // eslint-disable-next-line no-unused-vars\n static hasErrors (_errors) {\n scrollToErrors()\n }\n\n convertToAgency = () => {\n this.props.OpenModal(CONVERT_TO_AGENCY)\n }\n\n mergeUser = () => {\n this.props.SetMergeObjectOneId(this.props.person.PersonId)\n this.props.RedirectTo('/admin/people/merge')\n }\n\n setFormikNode = node => this.formik = node\n\n render () {\n const { person, region, email, alertPrefs, } = this.props\n\n if (!person) {\n return Loading ...\n }\n\n const {\n showAddresses,\n showEmails,\n showAuditData,\n regions,\n showPhones,\n showTypes,\n personIsDnr,\n readOnly,\n isNewPerson,\n addresses,\n phones,\n canViewPersonRegion,\n disableDeleteEmail,\n inactiveData,\n } = this.props\n let validationSchema = (showTypes ? Person.getValidationSchema() : Person.getMinValidationSchema())\n\n if (this.props.showRegion && canViewPersonRegion && personIsDnr) {\n validationSchema = this.addRegionValidation(validationSchema, person, regions)\n }\n\n const mergedPersonRoute = `/admin/people/${person.ParentId}`\n\n let initialValues = {\n ...person,\n }\n \n if (!isEmpty(region)) {\n initialValues = { ...initialValues, ...region, }\n }\n if (!isEmpty(alertPrefs)) {\n initialValues = { ...initialValues, ...alertPrefs, }\n }\n\n let enableMerge = !this.props.disableMerge\n let disableMergeMessage\n if (enableMerge) {\n disableMergeMessage = 'Unable to merge:'\n if (person && person.ConvertedToAgency === true) {\n disableMergeMessage = `${disableMergeMessage} ${person.PersonFirstName} ${person.PersonLastName} has been converted to an Agency.`\n enableMerge = false\n }\n if (person && person.ParentId) {\n disableMergeMessage = `${disableMergeMessage} ${person.PersonFirstName} ${person.PersonLastName} has already been merged.`\n enableMerge = false\n }\n if (person && personIsDnr) {\n disableMergeMessage = `${disableMergeMessage} ${person.PersonFirstName} ${person.PersonLastName} is a DNR Person and cannot be merged.`\n enableMerge = false\n }\n }\n\n return (\n \n {({ values, errors, isSubmitting, dirty, }) => (\n
    \n \n {\n Number.isInteger(person.ParentId) &&\n \n \n

    This Person has been merged and is no longer editable. Click here to edit the merged Person.

    \n \n
    \n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n showEmails &&\n \n this.EmailForm = node}\n readOnly={person.IsUser || readOnly}\n isEmailRequired={person.IsUser}\n showDelete={disableDeleteEmail ? false : (!person.IsUser || readOnly)}\n deleteFn={this.deleteEmail}\n />\n \n }\n {\n this.props.showTypes &&\n <>\n { this.renderContactMethod() }\n { this.renderPersonTypes(values) }\n \n }\n { this.renderRegion() }\n { this.renderAgencies(values) }\n \n {\n showAddresses && person && !isNewPerson && <>\n \n \n \n \n \n \n \n \n

    Addresses

    \n { this.props.readOnly ? null :\n \n Add\n \n }\n {\n 'Addresses' in inactiveData && \n \n {\n stopEvent(e)\n this.props.SetInactiveMetadata('Addresses', true)\n }}\n />\n {\n stopEvent(e)\n this.props.SetInactiveMetadata('Addresses', false)\n }}\n />\n \n }\n \n
    \n { this.buildAddresses() }\n
    \n \n }\n {\n showPhones && person && !isNewPerson && <>\n \n \n \n \n \n \n \n \n

    Phones

    \n { this.props.readOnly ? null : \n \n Add\n \n }\n {\n 'Phones' in inactiveData &&\n \n {\n stopEvent(e)\n this.props.SetInactiveMetadata('Phones', true)\n }}\n />\n {\n stopEvent(e)\n this.props.SetInactiveMetadata('Phones', false)\n }}\n />\n \n }\n \n
    \n { this.buildPhones() }\n
    \n \n }\n {\n person && this.props.canChangeAlertPrefs && this.props.showAlertPrefs && <>\n \n \n \n \n \n \n \n \n

    Alert Preferences

    \n \n \n
    \n { this.buildAlertPrefs() }\n
    \n \n }\n {\n !this.props.readOnly &&\n \n \n {\n showAuditData && person && !isNewPerson &&
    \n \n
    \n }\n { this.props.enableAgencyConversion && <>\n Convert to Agency\n \n

    Are you sure you want to convert {person.PersonFirstName} {person.PersonLastName} to a new Agency?

    \n

    This will perform the following actions:

    \n
      \n
    • Create a new Agency with the name {person.PersonFirstName}
    • \n
    • Update this Person's Permits to be associated with the new Agency
    • \n
    • Convert this Person to be a verified Agent for the new Agency
    • \n
    \n \n }\n submitAction={this.props.ConvertPersonToAgency}\n submitArgs={[ this.props.person.PersonId, ]}\n />\n \n }\n { !this.props.disableMerge \n && \n }\n \n \n
    \n }\n \n )}\n \n )\n }\n}\n\nfunction mapStateToProps (state, props) {\n \n let personTypes = [], regions = [], agencies = []\n /** @type {Number} `props.personId` by default, otherwise `person.PersonId` */\n let personId = props.PersonId\n const { person, } = props\n if (!personId && person && person.PersonId) {\n personId = person.PersonId\n person.Agency = props.agency\n }\n\n const inactiveData = personInactiveData(state)\n\n const canViewPersonRegion = userCanViewPersonRegion(state)\n \n // Only select regions if the person is DNR\n if (props.showRegion && canViewPersonRegion) {\n regions = regionsForSelectSelector(state, true)\n }\n const personIsDnr = personIsDnrSelector(state, personId)\n const userPersonId = userPersonIdSelector(state)\n\n // if this is a person managing themselves, get types by permission\n if ((person && person.PersonId === userPersonId) || (personId === userPersonId)) {\n personTypes = personTypesByPermissionSelector(state)\n } else if (personId) {\n personTypes = personTypesForPerson(state, personId)\n }\n\n // Only select Agencies if the person is an Agent\n const isAgent = personIsAgentOrAgencyPerson(state, personId)\n if (isAgent) {\n agencies = agenciesForSelectSelector(state)\n }\n\n const readOnly = props.readOnly || (props.person && Number.isInteger(props.person.ParentId))\n const { online, } = state.offline\n return {\n online,\n readOnly,\n regions,\n agencies,\n personTypes,\n personIsDnr,\n isAgent,\n canViewPersonRegion,\n inactiveData,\n user : userSelector(state),\n contactMethods : contactMethodsForSelectSelector(state),\n AlertMethods : alertMethodsSelector(state),\n AlertPreferences : alertPreferencesSelect(state),\n canUpdateRegion : userCanUpdatePersonRegion(state),\n canChangeAlertPrefs : userCanChangeAlertPrefs(state),\n canEditAgentPersonType : userCanEditVerifiedAgentPersonType(state),\n canVerifyAgents : userCanVerifyAgents(state),\n canSetSMDecisionStatus : userCanChangeSMDecisionStatus(state),\n }\n}\n\nconst mapDispatchToProps = {\n OpenModal : UiActions.openModal,\n Failure : ApiActions.failure,\n RedirectTo : AppActions.redirectTo,\n CreatePerson : PersonActions.createPerson,\n CreateLocalAddressForPerson : PersonActions.createLocalAddressForPerson,\n CreatePersonAddress : PersonActions.createPersonAddress,\n DeletePersonAddress : PersonActions.deletePersonAddress,\n CreateLocalPhoneForPerson : PersonActions.createLocalPhoneForPerson,\n CreatePersonPhone : PersonActions.createPersonPhone,\n DeletePersonPhone : PersonActions.deletePersonPhone,\n CreatePersonEmail : PersonActions.createPersonEmail,\n DeletePersonEmail : PersonActions.deletePersonEmail,\n UpdatePerson : PersonActions.updatePerson,\n UpdatePersonRegion : PersonActions.updatePersonRegion,\n SetPersonRegion : PersonActions.setPersonRegion,\n GetPersonLookupData : PersonActions.getPersonLookupData,\n SetInactiveMetadata : PersonActions.setInactiveMetadata,\n GetAllRegions : RegionActions.getAllRegions,\n GetAllAgencies : AgencyActions.getAllAgencies,\n VerifyAgencyUser : AgencyActions.verifyAgencyUser,\n ConvertPersonToAgency : AgencyActions.convertPersonToAgency,\n SetMergeObjectOneId : MergeActions.setObjectOneId,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(PersonForm)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { isEmpty, } from 'lodash'\r\nimport { object, number, array, func, bool, } from 'prop-types'\r\nimport { Formik, Field, } from 'formik'\r\nimport { Col, FormGroup, Label, Row, } from 'reactstrap'\r\n\r\n// Actions\r\nimport BurnPermitLocationActions from '../../redux/BurnPermitLocationRedux'\r\nimport GeoCoordinateActions from '../../redux/GeoCoordinateRedux'\r\n\r\n// Components\r\nimport Effect from '../Effect'\r\nimport { ValidatingField, Select, } from '../FormControls'\r\n\r\n// Models\r\nimport BurnPermitLocation from '../../models/BurnPermitLocation'\r\n\r\n// Selectors\r\nimport {\r\n directionsForSelectSelector,\r\n locationQuartersSelectSelector,\r\n permitLocationLegalDesc,\r\n} from '../../selectors/selectors'\r\n\r\n// Utilities\r\nimport { objHasProp, } from '../../utilities'\r\nimport retry from '../../utilities/retry'\r\n\r\n\r\nclass PLSSForm extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n this.validateForm = this.validateForm.bind(this)\r\n this.hasValues = this.hasValues.bind(this)\r\n }\r\n static propTypes = {\r\n TRSResult : object,\r\n permitLocation : object,\r\n BurnPermitLocationId : number,\r\n quarters : array,\r\n directions : array,\r\n GetLocationLookupData : func,\r\n UpdateBurnPermitLocationLegalDesc : func,\r\n ClearTRSResult : func,\r\n GetTRSExtent : func,\r\n onChange : func,\r\n readOnly : bool,\r\n online : bool,\r\n TRSCodeResult : object,\r\n }\r\n\r\n static defaultProps = {\r\n readOnly: false,\r\n }\r\n\r\n componentDidMount () {\r\n const { online, permitLocation, GetLocationLookupData, } = this.props\r\n if (online) {\r\n GetLocationLookupData()\r\n this.getTRSExtent(permitLocation)\r\n }\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n if (prevProps.TRSCodeResult !== this.props.TRSCodeResult && this.props.TRSCodeResult && this.formik) {\r\n this.formik.setValues({\r\n ...this.formik.values,\r\n ...this.props.TRSCodeResult,\r\n })\r\n const touchedFields = Object.entries(this.props.TRSCodeResult).reduce((prev, curr) => {\r\n prev[curr] = true\r\n return prev\r\n }, {})\r\n this.formik.setTouched(touchedFields)\r\n }\r\n }\r\n\r\n async validateForm () {\r\n if (!this.formik) {\r\n const isValid = await retry(this.validateForm, null, 100)\r\n return isValid\r\n }\r\n return await this.formik.validateForm()\r\n }\r\n\r\n isFormValid = () => {\r\n if (!this.formik) {\r\n setTimeout(() => this.isFormValid, 100)\r\n return\r\n }\r\n return this.formik.isValid\r\n }\r\n\r\n setTRSWithFeature = (feature) => {\r\n if (!feature || !feature.attributes && !feature.properties) {\r\n return\r\n }\r\n let attrs = feature.attributes ? feature.attributes : feature.properties ? feature.properties : null\r\n if (!attrs) {\r\n return\r\n }\r\n\r\n const { directions, } = this.props\r\n const { SECTION_NR, TOWNSHIP_NR, RANGE_NR, RANGE_DIR_CD, } = attrs\r\n const values = { ...this.formik.values, } \r\n if (RANGE_DIR_CD) {\r\n const dirId = directions.filter(d => d.Abbrev.toLowerCase() === RANGE_DIR_CD.toLowerCase())[0]\r\n values.LegalDescriptionDirectionId = dirId ? dirId.Value : ''\r\n }\r\n values.LegalDescriptionQuarter1 = 'None'\r\n values.LegalDescriptionQuarter2 = 'None'\r\n values.LegalDescriptionTownship = TOWNSHIP_NR || ''\r\n values.LegalDescriptionSection = SECTION_NR || ''\r\n values.LegalDescriptionRange = RANGE_NR || ''\r\n if (feature.geometry) {\r\n values.LegalDescriptionLocation = JSON.stringify(feature.geometry)\r\n }\r\n this.formik.setValues(values)\r\n }\r\n\r\n getTRSExtent = (values) => {\r\n if (!this.props.online || isEmpty(values) || values.LegalDescriptionLocation || typeof values === 'boolean') {\r\n return\r\n }\r\n\r\n const {\r\n LegalDescriptionSection,\r\n LegalDescriptionTownship,\r\n LegalDescriptionRange,\r\n LegalDescriptionDirectionId,\r\n } = values\r\n\r\n const legalDesc = {\r\n LegalDescriptionSection,\r\n LegalDescriptionTownship,\r\n LegalDescriptionRange,\r\n LegalDescriptionDirectionId,\r\n }\r\n\r\n if (Object.values(legalDesc).every(v => !!v)) {\r\n\r\n const { GetTRSExtent, directions, } = this.props\r\n\r\n const directionAbbrev = directions.find(d => d.Value.toString() === LegalDescriptionDirectionId.toString())\r\n if (objHasProp(directionAbbrev, 'Abbrev')) {\r\n GetTRSExtent(LegalDescriptionSection, LegalDescriptionTownship, LegalDescriptionRange, directionAbbrev.Abbrev)\r\n }\r\n }\r\n else {\r\n this.props.ClearTRSResult()\r\n }\r\n }\r\n\r\n submitForm = () => {\r\n this.formik.submitForm()\r\n }\r\n\r\n submit = (values) => {\r\n const {\r\n LegalDescriptionSection,\r\n LegalDescriptionTownship,\r\n LegalDescriptionRange,\r\n LegalDescriptionDirectionId,\r\n LegalDescriptionQuarter1,\r\n LegalDescriptionQuarter2,\r\n LegalDescriptionLocation,\r\n } = values\r\n\r\n const { UpdateBurnPermitLocationLegalDesc, BurnPermitLocationId, TRSResult, } = this.props\r\n const burnPermitLocation = {\r\n BurnPermitLocationId,\r\n LegalDescriptionSection,\r\n LegalDescriptionTownship,\r\n LegalDescriptionRange,\r\n LegalDescriptionDirectionId,\r\n LegalDescriptionQuarter1,\r\n LegalDescriptionQuarter2,\r\n }\r\n if (TRSResult && TRSResult.features.length) {\r\n // if we geocoded on mount\r\n burnPermitLocation.LegalDescriptionLocation = JSON.stringify(TRSResult.features[0].geometry)\r\n } else if (LegalDescriptionLocation) {\r\n // if we geocoded to get the plss\r\n burnPermitLocation.LegalDescriptionLocation = LegalDescriptionLocation\r\n }\r\n UpdateBurnPermitLocationLegalDesc(burnPermitLocation)\r\n }\r\n\r\n onChange = (changedValues, currValues) => {\r\n if (typeof this.props.onChange === 'function') {\r\n this.props.onChange(changedValues, currValues)\r\n }\r\n this.getTRSExtent(currValues)\r\n }\r\n\r\n hasValues () {\r\n if (!this.formik) {\r\n setTimeout(() => this.hasValues(), 100)\r\n return\r\n }\r\n return Object.values(this.formik.values).every(v => {\r\n return !!v\r\n })\r\n }\r\n\r\n setFormikNode = node => this.formik = node\r\n\r\n render () {\r\n const { readOnly, permitLocation, } = this.props\r\n const {\r\n LegalDescriptionSection,\r\n LegalDescriptionTownship,\r\n LegalDescriptionRange,\r\n LegalDescriptionDirectionId,\r\n LegalDescriptionQuarter1,\r\n LegalDescriptionQuarter2,\r\n } = permitLocation\r\n\r\n const legalDesc = {\r\n LegalDescriptionSection,\r\n LegalDescriptionTownship,\r\n LegalDescriptionRange,\r\n LegalDescriptionDirectionId,\r\n LegalDescriptionQuarter1,\r\n LegalDescriptionQuarter2,\r\n }\r\n return (\r\n \r\n {({ values, }) => (\r\n \r\n this.onChange(changedValues, values)} />\r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, ownProps) {\r\n const directions = directionsForSelectSelector(state, (d => [ 'E', 'W', ].includes(d.DirectionAbbreviation)))\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n directions,\r\n permitLocation : permitLocationLegalDesc(state, ownProps.BurnPermitLocationId),\r\n quarters : locationQuartersSelectSelector(state),\r\n TRSResult : state.GeoCoordinate.TRSResult,\r\n TRSCodeResult : state.GeoCoordinate.TRSCodeResult,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n GetLocationLookupData : BurnPermitLocationActions.getLocationLookupData,\r\n UpdateBurnPermitLocationLegalDesc : BurnPermitLocationActions.updateBurnPermitLocationLegalDesc,\r\n GetTRSExtent : GeoCoordinateActions.getTRSExtent,\r\n ClearTRSResult : GeoCoordinateActions.clearTRSResult,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(PLSSForm)","import React from 'react'\r\nimport { string, } from 'prop-types'\r\n\r\nconst ExternalLink = (props) => {\r\n const { text, } = props\r\n return \r\n {text}\r\n \r\n \r\n}\r\n\r\nExternalLink.propTypes = {\r\n text : string,\r\n className : string,\r\n title : string,\r\n}\r\n\r\nexport default React.memo(ExternalLink)","import React, { useState, } from 'react'\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, FormGroup, } from 'reactstrap'\nimport { Field, } from 'formik'\nimport { RequiredLabel, ValidatingField, } from '../FormControls'\nimport { bool, object, } from 'prop-types'\nimport { dateFormatter, } from '../../utilities'\nimport { useDispatch, } from 'react-redux'\nimport PostBurnActions from '../../redux/PostBurnRedux'\n\nconst DidNotBurn = (props) => {\n const { readOnly, values, } = props\n const [ isOpen, setIsOpen, ] = useState(false)\n const toggle = () => setIsOpen(!isOpen)\n const dispatch = useDispatch()\n const submitDidNotBurn = () => {\n if (values['DidNotBurnReason'] !== '') {\n values['DidNotBurn'] = true\n values['BurnDate'] = dateFormatter(Date.now(), 'YYYY-MM-DD')\n dispatch(PostBurnActions.createPostBurn(values))\n }\n }\n return (\n
    \n \n \n Did Not Burn Reason\n \n \n Why was the request not burned?\n \n \n \n \n {' '}\n \n \n \n
    \n )\n}\n\nDidNotBurn.propTypes = {\n readOnly : bool,\n values : object,\n}\n\nexport default DidNotBurn","// Libraries\r\nimport React from 'react'\r\nimport { Row, Col, FormGroup, Label, Button, FormFeedback, Card, CardBody, CardHeader, Collapse, Table, } from 'reactstrap'\r\nimport { object, func, bool, string, number, array, } from 'prop-types'\r\nimport { Formik, ErrorMessage, Field, Form, } from 'formik'\r\n\r\n// Components\r\nimport AuditData from '../AuditData'\r\nimport { RequiredLabel, ValidatingField, PopoverButton, } from '../FormControls'\r\nimport Effect from '../Effect'\r\nimport ExternalLink from '../ExternalLink'\r\nimport DidNotBurn from '../Modals/DidNotBurn'\r\n\r\n// Models\r\nimport PostBurn from '../../models/PostBurn'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\nimport { scrollToErrors, } from '../../utilities'\r\n\r\n\r\nconst CollapseSectionHeader = ({ onClick, text, isOpen, }) => {\r\n return <>\r\n

    {text}

    \r\n \r\n \r\n}\r\n\r\nCollapseSectionHeader.propTypes = {\r\n onClick : func,\r\n text : string,\r\n isOpen : bool,\r\n}\r\n\r\nconst NumberField = props => {\r\n return \r\n}\r\n\r\nNumberField.propTypes = {\r\n type : string,\r\n step : number,\r\n min : number,\r\n max : number,\r\n placeholder : string,\r\n name : string,\r\n readOnly : bool,\r\n}\r\n\r\nNumberField.defaultProps = {\r\n type : 'number',\r\n min : 0.00,\r\n placeholder : '0.00',\r\n}\r\n\r\n\r\nexport class PostBurnForm extends React.Component {\r\n static propTypes = {\r\n onSaveClick : func,\r\n burnTypes : array,\r\n postBurn : object,\r\n validationSchema : object,\r\n CancelPostBurnSubmit : func,\r\n PostBurnIsSubmitting : bool,\r\n burnRequest : object,\r\n }\r\n\r\n static defaultProps = {\r\n onSaveClick : () => {},\r\n burnTypes : [],\r\n postBurn : null,\r\n validationSchema : null,\r\n burnRequest : null,\r\n }\r\n\r\n state = {\r\n genSectionOpen : true,\r\n burnSectionOpen : true,\r\n fuelSectionOpen : true,\r\n weatherSectionOpen : true,\r\n }\r\n\r\n componentDidMount () {\r\n this.calculateConsumedTonnage()\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n hasErrors = (_errors) => {\r\n scrollToErrors('.post-burn')\r\n }\r\n\r\n cancelSubmit = evt => {\r\n stopEvent(evt)\r\n this.props.CancelPostBurnSubmit(this.props.postBurn.PostBurnId)\r\n }\r\n\r\n calculateConsumedTonnage = values => {\r\n // Don't attempt to calculate if we don't have a handle on formik\r\n // or if formik isn't dirty, like when the form is reset\r\n if (!this.formik || this.formik.dirty !== true) {\r\n return\r\n }\r\n\r\n const { pileType, broadcastType, naturalType, } = this.getBurnTypes()\r\n let ConsumedTons = 0.0\r\n if (pileType) {\r\n const { TotalPileConsumedTons, TotalPermitTonnage, PilesIgnitedPercent, } = values\r\n const pileIgnPerc = parseInt(PilesIgnitedPercent || 0)\r\n if (Number.isInteger(pileIgnPerc)) {\r\n ConsumedTons += ((pileIgnPerc / 100) * (TotalPileConsumedTons || TotalPermitTonnage))\r\n }\r\n }\r\n if (broadcastType || naturalType) {\r\n const { TotalTonsPerAcre, BurnedBlackAcres, BurnedBlackPercent, ProposedBurnArea, } = values\r\n const burnedBlackAcres = parseInt(BurnedBlackAcres || 0)\r\n const burnedBlackPerc = parseInt(BurnedBlackPercent || 0)\r\n if (TotalTonsPerAcre && Number.isInteger(burnedBlackAcres) && burnedBlackAcres > 0) {\r\n ConsumedTons += (burnedBlackAcres * TotalTonsPerAcre)\r\n }\r\n else if (TotalTonsPerAcre && Number.isInteger(burnedBlackPerc) && burnedBlackPerc > 0) {\r\n ConsumedTons += ((burnedBlackPerc / 100) * ProposedBurnArea * TotalTonsPerAcre)\r\n }\r\n }\r\n if (ConsumedTons === 0.0 && values.ConsumedTons > 0) {\r\n ConsumedTons = values.ConsumedTons\r\n }\r\n this.formik.setFieldValue('ConsumedTons', ConsumedTons)\r\n }\r\n\r\n getBurnTypes = () => {\r\n return {\r\n pileType : this.props.burnTypes.includes('Pile'),\r\n broadcastType : this.props.burnTypes.includes('Broadcast'),\r\n naturalType : this.props.burnTypes.includes('Natural'),\r\n }\r\n }\r\n\r\n setFormik = node => node ? this.formik = node : null\r\n\r\n render () {\r\n const { \r\n onSaveClick,\r\n postBurn,\r\n PostBurnIsSubmitting,\r\n burnRequest,\r\n } = this.props\r\n\r\n const {\r\n genSectionOpen,\r\n burnSectionOpen,\r\n fuelSectionOpen,\r\n weatherSectionOpen,\r\n } = this.state\r\n\r\n const { pileType, broadcastType, naturalType, } = this.getBurnTypes()\r\n const burnTypes = {\r\n pileBurn : pileType,\r\n broadcastNaturalBurn : broadcastType || naturalType,\r\n }\r\n\r\n const readOnly = !postBurn || PostBurnIsSubmitting\r\n const showCancel = postBurn && PostBurnIsSubmitting\r\n const valSchema = PostBurn.getValidationSchema(burnTypes)\r\n\r\n return \r\n {({ values, errors, dirty, touched, isSubmitting, }) => (\r\n
    \r\n this.calculateConsumedTonnage(values)}\r\n isSubmitting={isSubmitting}\r\n />\r\n

    If you did not burn, click the Did Not Burn button and enter the reason.

    \r\n \r\n \r\n this.setState({ genSectionOpen: !genSectionOpen, })} text={'General Information'} isOpen={genSectionOpen} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Burn Date\r\n \r\n \r\n \r\n \r\n \r\n Ignition Period (mins)\r\n \r\n \r\n \r\n \r\n \r\n Burn Time (24 HR HHMM)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.setState({ burnSectionOpen: !burnSectionOpen, })} text={'Burn Information'} isOpen={burnSectionOpen} />\r\n \r\n \r\n \r\n \r\n {\r\n pileType && \r\n \r\n \r\n Piles Ignited (%)\r\n
    \r\n Enter 100 if all piles were ignited.\r\n
    \r\n \r\n
    \r\n \r\n }\r\n {\r\n (broadcastType || naturalType) && <>\r\n {\r\n pileType && \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n {\r\n (broadcastType || naturalType) && <>\r\n \r\n \r\n this.setState({ fuelSectionOpen: !fuelSectionOpen, })} text={'Fuels Information'} isOpen={fuelSectionOpen} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {errorMessage => {errorMessage}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n } \r\n {\r\n (broadcastType || naturalType) && <>\r\n \r\n \r\n this.setState({ weatherSectionOpen: !weatherSectionOpen, })} text={'Weather Information'} isOpen={weatherSectionOpen} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {errorMessage => {errorMessage}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n {(!postBurn.BurnDate && burnRequest) && }\r\n\r\n
    \r\n {\r\n postBurn &&
    \r\n \r\n
    \r\n }\r\n { showCancel && }\r\n \r\n
    \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n }\r\n}\r\n\r\nexport const PostBurnFormCard = props => {\r\n const {\r\n isOpen,\r\n onClick,\r\n onSaveClick,\r\n readOnly,\r\n postBurn,\r\n validationSchema,\r\n burnTypes,\r\n } = props\r\n\r\n return \r\n \r\n Post Burn Reporting\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n}\r\n\r\nPostBurnFormCard.propTypes = {\r\n ...PostBurnForm.propTypes,\r\n isOpen : bool,\r\n onClick : func,\r\n}\r\n\r\nPostBurnFormCard.defaultProps = {\r\n ...PostBurnForm.defaultProps,\r\n isOpen : true,\r\n onClick : () => { },\r\n}\r\n\r\nexport default PostBurnFormCard","// Libraries\nimport React, { useState, } from 'react'\nimport { Field, } from 'formik'\nimport { Col, FormGroup, Button, Label, Modal, ModalHeader, ModalBody, ModalFooter, ButtonGroup, } from 'reactstrap'\nimport { string, number, PropTypes, func, bool, } from 'prop-types'\n// Components\nimport { ValidatingField, } from '../FormControls'\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SERVER, } = process.env\nconst LINK_PROP_SHAPE = {\n href : string,\n text : string,\n}\nconst LINK_PROP_DEFAULT = {\n href : '',\n test : '',\n}\n\nexport const LinkPreview = ({ href = '', text = '' , form = false, }) => {\n let hrefToRender = href || ''\n let textToRender = text || ''\n\n if (hrefToRender.endsWith('.pdf')) {\n hrefToRender = hrefToRender.concat('?' + (new Date()).getTime())\n }\n if (hrefToRender.includes('$SERVER')) {\n hrefToRender = hrefToRender.replace('$SERVER', REACT_APP_SERVER)\n }\n if (form) {\n return \n \n

    {textToRender}

    \n
    \n }\n return {textToRender}\n}\n\nLinkPreview.propTypes = {\n ...LINK_PROP_SHAPE,\n form: bool,\n}\nLinkPreview.defaultProps = {\n ...LINK_PROP_DEFAULT,\n form: false,\n}\n\nexport const LinkEditablePreview = ({ val, idx, arrayHelpers, listLen, isValid, dirty, setFieldValue, } ) => {\n const { href = '', text = '', isNew = false, } = val\n let hrefToRender = href || ''\n let textToRender = text || ''\n const [ modalOpen, setModalOpen, ] = useState(isNew)\n if (isNew) {\n setFieldValue('RuleValue[' + idx + ']', { href, text, }, false)\n }\n const toggleModal = () => setModalOpen(!modalOpen)\n const remove = () => {\n setModalOpen(false)\n arrayHelpers.remove(idx)\n }\n return <>\n \n \n \n \n \n \n arrayHelpers.swap(idx, idx+1)}\n size={'sm'}\n title={'Move Down'}\n alt={'Move Down'}\n disabled={modalOpen || (idx === listLen - 1)}\n >\n \n \n \n

    \n { modalOpen \n ? 'Editing...' \n : \n }\n

    \n {modalOpen &&\n \n \n Editing Link\n \n \n \n \n \n }\n \n}\nLinkEditablePreview.propTypes = {\n val: PropTypes.shape({\n ...LINK_PROP_SHAPE,\n isNew: bool,\n }),\n idx : number,\n isValid : bool,\n arrayHelpers : PropTypes.shape({\n remove: func,\n }),\n}\nLinkEditablePreview.defaultProps = {\n val: {\n ...LINK_PROP_DEFAULT,\n isNew: false,\n },\n idx : null,\n isValid : false,\n arrayHelpers : {\n remove: () => {},\n },\n}\n\n\nexport const LinkEditCard = ({ val, idx, onDone, onDelete, isValid, dirty, }) => (\n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n \n)\n\nLinkEditCard.propTypes = {\n ...LinkEditablePreview.propTypes,\n onDone: func,\n}\n\nLinkEditCard.defaultProps = {\n ...LinkEditablePreview.defaultProps,\n onDone: () => {},\n}","// Libraries\nimport React from 'react'\nimport { Formik, Field, FieldArray, } from 'formik'\nimport { Row, Col,FormGroup, Button, Input, Spinner, ButtonGroup, } from 'reactstrap'\nimport { bool, func, arrayOf, number, object, string, PropTypes, } from 'prop-types'\n// Components\nimport { ValidatingField, } from '../FormControls'\nimport { LinkPreview, LinkEditablePreview, } from './LinkRuleForm'\nimport Rule from '../../models/Rule'\n\nexport const RuleForm = ({ canEdit, readOnly, rule, onToggleEdit, onSubmit, colSizes, updating, }) => {\n if (!rule) {\n return null\n }\n\n const buttonColor = readOnly ? 'secondary' : 'success'\n const buttonText = readOnly ? 'Edit' : 'Save'\n const valSchema = Rule.validationSchema(rule.RuleType, rule.RuleId)\n\n let ruleValueFieldType = 'text'\n\n if (rule.RuleType === 'number') {\n\n ruleValueFieldType = 'number'\n } else if (rule.RuleType === 'json-links') {\n ruleValueFieldType = 'json-links'\n } else {\n ruleValueFieldType = 'textarea'\n }\n\n const extraValueRow = false\n\n return \n {({ values, handleSubmit, handleReset, isValid, dirty, setFieldValue, }) => (\n <>\n \n \n {rule.RuleId}\n {canEdit ? \n !readOnly && updating ? <>Saving... :\n \n \n {!readOnly && }\n : null\n }\n \n \n {values.RuleName}\n \n \n {readOnly ? values.RuleEnabled ? 'Yes' : 'No' :\n \n \n {({ field, }) => ()}\n \n \n }\n \n \n {readOnly ? values.RuleDescription :\n \n }\n \n \n \n \n \n \n )}\n \n}\n\nRuleForm.propTypes = {\n canEdit : bool,\n readOnly : bool,\n rule : object,\n onToggleEdit : func,\n onSubmit : func,\n colSizes : arrayOf(number),\n updating : bool,\n updated : bool,\n updateFailed : bool,\n}\n\nRuleForm.defaultProps = {\n canEdit : false,\n readOnly : false,\n rule : null,\n onToggleEdit : () => { },\n onSubmit : () => { },\n colSizes : [ 1, 2, 2, 2, 2, ],\n updating : false,\n updated : false,\n updateFailed : false,\n}\n\n\n\nconst RuleFormValue = ({ value, type, readOnly, additionalClasses, isValid, dirty, setFieldValue, }) => {\n let valueField = null\n if (readOnly) {\n if (type === 'text') {\n valueField =

    {value}

    \n } else if (type === 'number') {\n valueField = value\n } else if (type === 'json-links' && Array.isArray(value)) {\n valueField = <>{value.map((x, idx) => {\n return

    \n })}\n }\n } else if (type === 'json-links') {\n const listLen = value.length\n valueField = \n {(arrayHelpers, anything) => (\n <>\n {value.map((val, idx) => {\n return \n })}\n \n \n )}\n \n } else {\n valueField = \n \n \n }\n return valueField\n}\n\nRuleFormValue.propTypes = {\n value : PropTypes.oneOfType([ object, PropTypes.arrayOf(object), number, string, ]),\n type : string,\n readOnly : bool,\n additionalClasses : string,\n}\n\nRuleFormValue.defaultProps = {\n value : null,\n type : '',\n readOnly : false,\n additionalClasses : '',\n}","// Libraries\nimport React from 'react'\nimport { Row, Col, Label, } from 'reactstrap'\nimport { bool, array, func, } from 'prop-types'\n// Components\nimport { RuleForm, } from './RuleForm'\n\nexport default class RuleListForm extends React.Component {\n static propTypes = {\n rules : array,\n canEdit : bool,\n onSubmit : func,\n rulesUpdating : array,\n rulesUpdated : array,\n rulesUpdateFailed : array,\n resetLoad : func,\n }\n\n static defaultProps = {\n rules : [],\n canEdit : false,\n onSubmit : () => console.error('Submit method was not provided'),\n }\n\n state = {\n editing: [],\n }\n\n componentDidMount () {\n this.props.resetLoad()\n }\n\n componentDidUpdate ({ rulesUpdated = [], rulesUpdateFailed = [], }) {\n const newRulesUpdated = this.props.rulesUpdated || []\n if (newRulesUpdated.length > 0) {\n const diff = newRulesUpdated.filter(x => !rulesUpdated.includes(x))\n if (diff.length > 0){\n this.rulesUpdated(diff)\n }\n }\n\n const newRulesUpdateFailed = this.props.rulesUpdateFailed || []\n if (newRulesUpdateFailed.length > 0) {\n const diff = newRulesUpdateFailed.filter(x => !rulesUpdateFailed.includes(x))\n if (diff.length > 0) {\n this.rulesFailed(diff)\n }\n }\n }\n\n rulesFailed = (ids = []) => {\n this.props.resetLoad(ids)\n }\n\n rulesUpdated = (ids = []) => {\n const { editing = [], } = this.state\n const nextState = editing.filter(x => !ids.includes(x))\n this.props.resetLoad(ids)\n this.setState({ editing: nextState, })\n }\n\n updateRule = (values) => {\n this.props.onSubmit(values.RuleId, values)\n }\n\n setEditState = (id, handleReset = null) => {\n const { editing = [], } = this.state\n if (!id) {\n return\n }\n let nextState = null\n if (!editing.includes(id)) {\n nextState = editing.concat(id)\n } else {\n nextState = editing.filter(x => x !== id)\n }\n if (nextState) {\n this.props.resetLoad(id)\n if (handleReset) {\n handleReset()\n }\n this.setState({ editing: nextState, })\n }\n }\n\n render () {\n const { \n canEdit, \n rules, \n rulesUpdated,\n } = this.props\n const { editing, } = this.state\n const colSizes = canEdit ? [ 1, 2, 1, 4, 3, ] : [ 1, 2, 1, 4, 4, ]\n \n\n return (\n <>\n \n #\n Name\n \n \n \n \n
    \n {rules.map((r) => {\n const { RuleId, } = r\n const isEditing = editing.includes(RuleId)\n const updated = rulesUpdated.includes(RuleId)\n return
    \n \n
    \n
    \n })}\n \n )\n }\n}","import React from 'react'\r\nimport { func, array, object, string, number, PropTypes, bool, } from 'prop-types'\r\nimport { Row, Col, Card, CardBody, Input, Label, FormGroup, Button, } from 'reactstrap'\r\nimport { Link, } from 'react-router-dom'\r\n\r\n\r\nconst FormButton = ({ target, onClick, buttonText, disabled, }) => {\r\n return \r\n {buttonText || 'Select All'}\r\n \r\n}\r\n\r\nFormButton.propTypes = {\r\n target : PropTypes.oneOfType([ object, string, ]),\r\n onClick : func,\r\n buttonText : PropTypes.oneOfType([ object, string, ]),\r\n disabled : bool,\r\n}\r\n\r\n\r\nconst MergeForm = ({\r\n obj,\r\n id,\r\n onChange,\r\n showControls,\r\n checkAll,\r\n checkedIds,\r\n onButtonClick,\r\n targetName,\r\n buttonText,\r\n disabled,\r\n profileRoute,\r\n}) => {\r\n const objKeys = Object.keys(obj)\r\n const markup = []\r\n for (let i = 0, len = objKeys.length; i < len; i++) {\r\n const key = objKeys[i]\r\n const valueObj = obj[key]\r\n // Chrome devtools cannot handle styling the code when template\r\n // literals are used inline of elements. Breaking them out in to\r\n // variables preserves the code styling.\r\n const domKey = `${key}-group`\r\n if (Array.isArray(valueObj.Value)) {\r\n const cardBodyClass = `p-3 ${domKey}`\r\n const arrMarkup = []\r\n if (!valueObj.Value.length) {\r\n const card = \r\n No {valueObj.Label}.\r\n \r\n arrMarkup.push(card)\r\n }\r\n else {\r\n for (let a = 0, aLen = valueObj.Value.length; a < aLen; a++) {\r\n const cardKey = `${domKey}-${a}`\r\n const card = \r\n \r\n \r\n \r\n \r\n
    ID: {valueObj.Value[a]}
    \r\n \r\n \r\n {\r\n Array.isArray(valueObj.Text[a])\r\n ? valueObj.Text[a].map((t, i) =>
    {t}
    )\r\n :
    {valueObj.Text[a]}
    \r\n }\r\n \r\n
    \r\n
    \r\n
    \r\n arrMarkup.push(card)\r\n }\r\n }\r\n markup.push({arrMarkup})\r\n continue\r\n }\r\n const inputId = `${key}-${id}`\r\n const _showControls = showControls && valueObj.Readonly !== true\r\n markup.push(\r\n \r\n {\r\n _showControls && \r\n -1}\r\n disabled={disabled}\r\n />\r\n \r\n }\r\n \r\n \r\n {valueObj.Label}\r\n \r\n \r\n {\r\n !_showControls &&\r\n \r\n }\r\n {\r\n valueObj.Warning &&
    {valueObj.Warning}
    \r\n }\r\n \r\n
    \r\n
    \r\n )\r\n }\r\n return <>\r\n
    \r\n \r\n {\r\n profileRoute && View Profile\r\n }\r\n
    \r\n
    {markup}
    \r\n \r\n}\r\n\r\nMergeForm.propTypes = {\r\n obj : object,\r\n id : PropTypes.oneOfType([ string, number, ]),\r\n onChange : func,\r\n showControls : bool,\r\n checkedIds : array,\r\n checkAll : PropTypes.oneOfType([ string, bool, ]),\r\n onButtonClick : func,\r\n targetName : string,\r\n buttonText : string,\r\n disabled : bool,\r\n profileRoute : string,\r\n}\r\n\r\nMergeForm.defaultProps = {\r\n showControls : true,\r\n disabled : false,\r\n}\r\n\r\nexport default MergeForm","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { bool, string, number, func, array, object, PropTypes, } from 'prop-types'\nimport { debounce, isEqual, isEmpty, } from 'lodash'\nimport * as Yup from 'yup'\nimport { Formik, Field, ErrorMessage, } from 'formik'\nimport { Link, } from 'react-router-dom'\nimport {\n Row,\n Col,\n Card,\n CardBody,\n FormGroup,\n FormFeedback,\n Input,\n Label,\n ButtonGroup,\n Button,\n} from 'reactstrap'\n\n// Actions\nimport ApplicantInfoActions from '../../redux/ApplicantInfoSectionRedux'\n\n// Components\nimport BurnPermitFormSection from './FormSection'\nimport { PersonForm, } from '../Forms'\nimport {\n AutoComplete,\n Select,\n PopoverButton,\n ValidatingField,\n} from '../FormControls'\nimport Effect from '../Effect'\nimport AuditData from '../AuditData'\n\n// Selectors\nimport { agentsForSelectSelector, } from '../../selectors/agentSelectors'\nimport { agenciesForSelectSelector, } from '../../selectors/agencySelectors'\nimport { landownerSelector, } from '../../selectors/personSelectors'\nimport {\n permitForApplicantInfoSelector,\n applicantInfoBurnerSelector,\n applicantInfoAgentSelector,\n applicantInfoAgencySelector,\n} from '../../selectors/applicantInfoSelectors'\n\n// Utilities\nimport stopEvent from '../../utilities/stopEvent'\nimport retry from '../../utilities/retry'\nimport { userCanSelectPermitLandowner, } from '../../selectors/burnPermitPermissionSelectors'\nimport { appIsOnlineSelector, } from '../../selectors/selectors'\n\n// eslint-disable-next-line no-undef\nconst { NODE_ENV, } = process.env\n\n\nfunction requiredNumberSchema (message) {\n return Yup.number().min(1, message).required(message)\n}\n\nconst validationSchema = Yup.object().shape({\n MailPermitToAgentFlag : Yup.boolean(),\n AgencyId : Yup.string()\n .when('MailPermitToAgentFlag', {\n is : true,\n then : Yup.string()\n .ensure('Agent is not associated with an Agency. Update their profile to set their Agency.')\n .required('Agent is not associated with an Agency. Update their profile to set their Agency.'),\n otherwise: Yup.string().nullable(),\n }),\n Verified: Yup.string()\n .when('MailPermitToAgentFlag', {\n is : true,\n then : Yup.string()\n .ensure('Agent is not verified. Update their profile to verify their Agency.')\n .required('Agent is not verified. Update their profile to verify their Agency.'),\n otherwise: Yup.string().nullable(),\n }),\n AgentId: Yup.number()\n .when('MailPermitToAgentFlag', {\n is : true,\n then : requiredNumberSchema('Please select an Agent'),\n otherwise : Yup.number().nullable(),\n }),\n AgentPermitAddressId: Yup.number()\n .when('AgentId', {\n is: agentId => {\n return agentId > 0\n },\n then : requiredNumberSchema('Please select an Agent Address'),\n otherwise : Yup.number().nullable(),\n }),\n AgentPermitPrimaryPhoneId: Yup.number()\n .when('AgentId', {\n is: agentId => {\n return agentId > 0\n },\n then : requiredNumberSchema('Please select an Agent Phone'),\n otherwise : Yup.number().nullable(),\n }),\n BurnerPermitAddressId: Yup.number()\n .when('BurnerId', {\n is: burnerId => {\n return burnerId > 0\n },\n then : requiredNumberSchema('Please select a Landowner Address'),\n otherwise : Yup.number().nullable(),\n }),\n BurnerPermitPrimaryPhoneId: Yup.number()\n .when('BurnerId', {\n is: burnerId => {\n return burnerId > 0\n },\n then : requiredNumberSchema('Please select a Landowner Phone'),\n otherwise : Yup.number().nullable(),\n }),\n})\n\n\nconst LoadingCard = ({ message, }) => {\n return \n \n \n
    { message }
    \n
    \n \n
    \n}\n\nLoadingCard.defaultProps = {\n message: 'Loading...',\n}\n\nLoadingCard.propTypes = {\n message: string,\n}\n\n\nclass ApplicantInfoSection extends React.Component {\n \n constructor (props) {\n super(props)\n this.validateSection = this.validateSection.bind(this)\n this.onFormChange = debounce(this.onFormChange.bind(this), 300)\n }\n\n static whyDidYouRender = NODE_ENV === 'development'\n\n static propTypes = {\n // mapStateToProps\n activeBurnPermit : object,\n agents : array,\n children : array,\n landowners : array,\n online : bool,\n burner : object,\n agent : object,\n isDnr : bool,\n isAgent : bool,\n agency : object,\n agencies : array,\n selectedAgencyId : PropTypes.oneOfType([ number, string, ]),\n selectedAgentId : PropTypes.oneOfType([ number, string, ]),\n selectedLandownerId : PropTypes.oneOfType([ number, string, ]),\n targetLandowner : string,\n sectionIsLoading : bool,\n canSelectLandowner : bool,\n isActive : bool,\n // mapDispatchToProps\n UpdateApplicantInfo : func,\n GetApplicantInfoData : func,\n ResetApplicantInfo : func,\n SetApplicantInfo : func,\n SetSelectedAgencyId : func,\n SetSelectedAgentId : func,\n SetSelectedLandownerId : func,\n SetTargetLandowner : func,\n SetMailToAgent : func,\n SetContactData : func,\n // from parent\n title : string.isRequired,\n sectionId : number.isRequired,\n isDisabled : bool,\n readOnly : bool,\n userPersonId : PropTypes.oneOfType([ number, string, ]),\n }\n\n static defaultProps = {\n readOnly : false,\n userPersonId : null,\n burner : null,\n agent : null,\n canSelectLandowner : false,\n }\n\n state = {\n // generic validation error\n validationError : '',\n // save flags\n saving : false,\n saved : false,\n isValid : '',\n }\n\n async validateSection ({ evt, submit = true, }) {\n if (evt) {\n stopEvent(evt)\n }\n if (!this.formik) {\n return await retry(this.validateSection, { submit, }, 100)\n }\n const validationError = []\n const {\n MailPermitToAgentFlag,\n Landowner,\n Agency,\n AgentId,\n } = this.formik.values\n\n let showGenericError = false\n let landownerFormIsValid = true\n let saving = false\n const sectionErrors = await this.formik.validateForm()\n const sectionErrorEntries = Object.entries(sectionErrors).filter(e => e[0] !== 'isCanceled')\n if (sectionErrorEntries.length > 0) {\n showGenericError = true\n }\n \n const { targetLandowner, canSelectLandowner, isAgent, } = this.props\n \n if (targetLandowner === 'Person' || !targetLandowner) {\n if (this.LandownerForm) {\n const errors = await this.LandownerForm.validateForm()\n if (Object.keys(errors).length > 0) {\n landownerFormIsValid = false\n showGenericError = true\n }\n }\n // This is easier than trying to configure the Yup schema to support the\n // circular dependency between choosing a Landowner or Agency\n // Since Agents can also choose a Landowner or Agency, we need this\n // validation to also block them from saving the section without choosing one\n if ((canSelectLandowner || isAgent) && !Landowner && !Agency) {\n const msg = 'You must choose a Landowner or Agency'\n sectionErrorEntries.push([ 'Landowner/Agency', msg, ])\n landownerFormIsValid = false\n }\n }\n else if (this.props.targetLandowner === 'Agency' && (!MailPermitToAgentFlag || (!AgentId || AgentId < 0))) {\n this.formik.setFieldError('Agent', 'You must specify an Agent when creating an Agency Permit.')\n showGenericError = true\n }\n\n if (MailPermitToAgentFlag && (!AgentId || AgentId < 0)) {\n this.formik.setFieldError('Agent', 'You must specify an Agent to email Permit Documents to or uncheck the Agent checkbox above.')\n showGenericError = true\n }\n\n if (MailPermitToAgentFlag && AgentId) {\n if (!this.formik.values.AgencyId) {\n this.formik.setFieldTouched('AgencyId')\n }\n if (!this.formik.values.Verified) {\n this.formik.setFieldTouched('Verified')\n }\n }\n\n let agentEmailError = ''\n if (AgentId > 0 && this.props.agent && !this.props.agent.Email) {\n agentEmailError = <>\n

    \n An Email must be configured for this Agent. Click here \n to go to their profile and configure an Email.\n

    \n \n validationError.push(agentEmailError)\n }\n\n if (showGenericError) {\n validationError.push('See forms below for specific errors.')\n }\n\n if (sectionErrorEntries.length > 0) {\n let errorMsg\n for (let se = 0, seLen = sectionErrorEntries.length; se < seLen; se++) {\n errorMsg = sectionErrorEntries[se][1]\n // Push the error message into the validation error array\n if (!validationError.includes(errorMsg)) {\n validationError.push(errorMsg)\n }\n }\n }\n \n // Always update the state of the validation errors to clear any out that should no longer be there\n const updateObj = {\n saving,\n saved : false,\n validationError : validationError.join(';'),\n agentEmailError,\n }\n this.setState(updateObj)\n let isValid = validationError.length === 0 && landownerFormIsValid\n if (isValid && !showGenericError) {\n if (submit) {\n const val = await this.formik.submitForm()\n isValid = (val && isEmpty(val)) || true\n }\n }\n return isValid\n }\n\n submit = (values) => {\n const {\n BurnerId,\n BurnerPermitAddressId,\n BurnerPermitPrimaryPhoneId,\n BurnerPermitSecondaryPhoneId,\n AgencyId,\n AgentId,\n AgentPermitAddressId,\n AgentPermitPrimaryPhoneId,\n AgentPermitSecondaryPhoneId,\n MailPermitToAgentFlag,\n } = values\n\n const { UpdateApplicantInfo, activeBurnPermit, targetLandowner, } = this.props\n let burnPermit = { ...activeBurnPermit, AgencyId, }\n\n burnPermit.MailPermitToAgentFlag = MailPermitToAgentFlag\n // This is now always required\n burnPermit.MailPermitToLandownerFlag = true\n if (MailPermitToAgentFlag) {\n burnPermit.AgentId = AgentId\n burnPermit.AgentPermitAddressId = AgentPermitAddressId\n burnPermit.AgentPermitPrimaryPhoneId = AgentPermitPrimaryPhoneId\n burnPermit.AgentPermitSecondaryPhoneId = AgentPermitSecondaryPhoneId\n }\n else {\n burnPermit.AgentPermitAddressId = null\n burnPermit.AgentPermitPrimaryPhoneId = null\n burnPermit.AgentPermitSecondaryPhoneId = null\n burnPermit.AgentId = null\n }\n if (targetLandowner === 'Person') {\n burnPermit.BurnerId = BurnerId\n burnPermit.BurnerPermitAddressId = BurnerPermitAddressId\n burnPermit.BurnerPermitPrimaryPhoneId = BurnerPermitPrimaryPhoneId\n burnPermit.BurnerPermitSecondaryPhoneId = BurnerPermitSecondaryPhoneId\n // We only want to null out the Agency if an Agent is not set\n burnPermit.AgencyId = MailPermitToAgentFlag ? AgencyId : null\n }\n else if (targetLandowner === 'Agency') {\n burnPermit.AgencyId = AgencyId\n burnPermit.BurnerPermitSecondaryPhoneId = null\n burnPermit.BurnerPermitPrimaryPhoneId = null\n burnPermit.BurnerPermitAddressId = null\n burnPermit.BurnerId = null\n }\n else {\n // If no target is set, null out everything and let the API return the appropriate error message\n burnPermit.BurnerPermitSecondaryPhoneId = null\n burnPermit.BurnerPermitPrimaryPhoneId = null\n burnPermit.BurnerPermitAddressId = null\n burnPermit.BurnerId = null\n burnPermit.AgencyId = null\n }\n\n delete burnPermit['Agency']\n delete burnPermit['Agent']\n delete burnPermit['Landowner']\n \n if (!isEqual(activeBurnPermit, burnPermit)) {\n if (this.props.isAgent) {\n burnPermit.MailPermitToAgentFlag = true\n }\n UpdateApplicantInfo(burnPermit)\n }\n }\n \n componentWillUnmount () {\n this.props.ResetApplicantInfo()\n }\n\n componentDidUpdate (prevProps) {\n // Don't fire off anything unless we're active\n if (!this.props.isActive) {\n return\n }\n if (prevProps.isActive !== true && this.props.isActive === true) {\n this.props.GetApplicantInfoData()\n this.props.SetApplicantInfo(this.props.activeBurnPermit.BurnPermitId)\n }\n // If a user picks an agent first before an agency is selected\n if (prevProps.selectedAgentId !== this.props.selectedAgentId && this.props.selectedAgentId && !this.props.selectedAgencyId && this.props.agencies.length === 1) {\n // The state should update to only have that person's agency in the props\n const { Text, } = this.props.agencies[0]\n \n // So update the form to set that agencyId as the selected Agency\n // This should also trigger the AgencyOnChange method to update\n // the app state.\n this.agencyAutoSelect(Text)\n }\n if (prevProps.agency && !this.props.agency) {\n this.agencyAutoSelect('')\n }\n if (this.formik && this.formik.dirty !== true) {\n const { agency, agencies, agent, agents, burner, } = this.props\n const { AgencyId, AgentId, BurnerId, } = this.formik.values\n // Only change the selection if there is an actual change\n if (!isEmpty(burner) && !isEqual(prevProps.burner, burner) && BurnerId !== burner.Person.PersonId) {\n this.landownerAutoSelect(`${burner.Person.PersonId}: ${burner.Person.PersonName}`)\n }\n const newAgent = !isEqual(prevProps.agent, agent)\n const agentsNowAvailable = !prevProps.agents.length && agents.length\n // Only change the selection if there is an actual change\n if (!isEmpty(agent) && (newAgent || agentsNowAvailable) && AgentId !== agent.Person.PersonId) {\n this.agentAutoSelect(`${agent.Person.PersonId}: ${agent.Person.PersonName}`)\n }\n const newAgency = !isEqual(prevProps.agency, agency)\n const agenciesNowAvailable = !prevProps.agencies.length && agencies.length\n // Only change the selection if there is an actual change\n if (!isEmpty(agency) && (newAgency || agenciesNowAvailable) && AgencyId !== agency.AgencyId) {\n this.agencyAutoSelect(`${agency.AgencyId}: ${agency.AgencyName}`)\n }\n if (prevProps.targetLandowner !== this.props.targetLandowner && this.props.targetLandowner === 'Agency') {\n this.formik.setFieldValue('BurnerId', '')\n // This is to support existing Pending Applications where only the Agent is selected\n // Agent users cannot change the Agent or the Agency of the Application, so we need\n // to default it for them if their app was created before this update is deployed\n if (this.props.agencies.length === 1 && !this.props.selectedAgencyId) {\n this.agencyAutoSelect(this.props.agencies[0].Text)\n }\n }\n if (prevProps.activeBurnPermit.MailPermitToAgentFlag !== this.props.activeBurnPermit.MailPermitToAgentFlag) {\n this.validateSection({ submit: false, })\n }\n }\n }\n\n componentDidMount = () => {\n const { GetApplicantInfoData, canSelectLandowner, agency, agent, burner, isActive, } = this.props\n if (isActive) {\n GetApplicantInfoData()\n }\n\n if (canSelectLandowner && burner) {\n if (this.formik) {\n this.formik.setFieldValue('BurnerId', burner.Person.PersonId)\n }\n this.landownerAutoSelect(`${burner.Person.PersonId}: ${burner.Person.PersonName}`, true)\n }\n if (agent) {\n if (this.formik) {\n this.formik.setFieldValue('AgentId', agent.Person.PersonId)\n }\n this.agentAutoSelect(`${agent.Person.PersonId}: ${agent.Person.PersonName}`, true)\n }\n if (agency && agency.AgencyName) {\n if (this.formik) {\n this.formik.setFieldValue('AgencyId', agency.AgencyId)\n }\n this.agencyAutoSelect(`${agency.AgencyId}: ${agency.AgencyName}`, true)\n }\n }\n\n getPersonAddress = (person, value) => {\n if (value && person.Addresses.length) {\n const [ addr, ] = person.Addresses.filter(a => a.Value === value)\n if (addr && addr.Text) {\n return addr.Text\n }\n }\n return ''\n }\n\n addressForm = (person, namePrefix) => {\n const { online, } = this.props\n\n if (!person) {\n return null\n }\n \n if (!person.Addresses) {\n return Loading Addresses...\n }\n if (person.Addresses && person.Addresses.length === 0) {\n if (Number.isInteger(person.Person.PersonId) && person.Person.PersonId !== this.props.userPersonId) {\n if (this.props.canSelectLandowner) {\n return \n \n

    \n Add an Active Address for this Person here.\n { !online && }\n

    \n \n
    \n }\n else {\n return \n \n

    \n No Addresses are available for this Person.\n

    \n \n
    \n }\n }\n else {\n return \n \n

    \n Add an Active Address in your profile.\n { !online && }\n

    \n \n
    \n }\n }\n\n return <>\n \n \n \n \n \n {({ field, form, }) => (\n this.props.readOnly !== true\n ? \n : \n \n \n \n )}\n \n \n \n \n \n \n }\n\n phoneForms = (person, namePrefix) => {\n const { online, } = this.props\n\n if (!person) {\n return null\n }\n \n if (!person.Phones) {\n return Loading Phone Numbers...\n }\n\n if (person.Phones && person.Phones.length === 0) {\n if (Number.isInteger(person.Person.PersonId) && person.Person.PersonId !== this.props.userPersonId) {\n if (this.props.canSelectLandowner) {\n return \n \n

    \n Add an Active Phone Number for this Person here.\n { !online && }\n

    \n \n
    \n }\n else {\n return \n \n

    \n No Phone Numbers are available for this Person.\n

    \n \n
    \n }\n }\n else {\n return \n \n

    \n Add an Active Phone Number in your profile.\n { !online && }\n

    \n \n
    \n }\n }\n const multiplePhones = person.Phones.length > 1\n return \n \n \n \n {({ field, form, }) => (\n \n )}\n \n \n \n {\n multiplePhones && \n \n \n {({ field, form, }) => (\n \n )}\n \n \n \n }\n \n }\n\n agentAutoSelect = ({ value, label, }) => {\n const newFormState = this.agentSetFormValues({ value, label, })\n if (this.props.selectedAgentId !== newFormState.AgentId) {\n this.props.SetSelectedAgentId(newFormState.AgentId)\n }\n }\n\n agentSetFormValues = ({ value, label, }) => {\n if (!this.formik) {\n return {}\n }\n const newFormState = { ...this.formik.values, }\n if (value) {\n newFormState.AgentId = value\n }\n else if (!value) {\n newFormState.AgentId = ''\n this.props.SetSelectedAgentId('')\n }\n newFormState.Agent = label\n if (this.formik.values.AgentId !== newFormState.AgentId) {\n newFormState.AgentPermitAddressId = ''\n newFormState.AgentPermitPrimaryPhoneId = ''\n newFormState.AgentPermitSecondaryPhoneId = ''\n }\n this.formik.setValues(newFormState)\n return newFormState\n }\n\n agentForm = (values) => {\n const {\n agents,\n readOnly,\n selectedAgentId,\n canSelectLandowner,\n isDnr,\n isAgent,\n online,\n } = this.props\n let markup = \n if (agents && agents.length > 0) {\n let value = values.Agent\n if (value && values.AgentId > 0 && value.startsWith(values.AgentId) === false) {\n value = `${values.AgentId}: ${values.Agent}`\n }\n markup = \n \n \n \n \n \n \n }\n return \n \n \n \n {\n selectedAgentId > 0 && canSelectLandowner &&\n \n View Profile\n \n }\n { markup }\n {\n isDnr && !readOnly && !values.AgentId && \n Unable to find the Agent you're looking for? Add them \n here.\n \n {\n !online &&\n \n }\n \n }\n \n \n \n }\n\n personForm = () => {\n const { isDisabled, userPersonId, burner, canSelectLandowner, } = this.props\n\n if (canSelectLandowner) {\n return this.personSelect()\n }\n if (!burner) {\n return 'Unable to select a Person as Landowner for this Permit Application.'\n }\n return this.LandownerForm = node}\n onChange={this.onChange}\n />\n }\n\n agencySetFormValues = ({ label, value, }) => {\n if (!this.formik) {\n return {}\n }\n const newFormState = { ...this.formik.values, }\n if (value) {\n newFormState.AgencyId = value\n if (!!newFormState.BurnerId && parseInt(newFormState.BurnerId > 0)) {\n newFormState.BurnerId = ''\n newFormState.BurnerPermitAddressId = ''\n newFormState.BurnerPermitPrimaryPhoneId = ''\n newFormState.BurnerPermitSecondaryPhoneId = ''\n }\n }\n else if (!value) {\n newFormState.AgencyId = ''\n this.props.SetSelectedAgencyId('')\n if (newFormState.AgentId > 0) {\n // Clear out the AgentId also if one is set so that the full\n // Agency dataset is available for searching since if an AgentId\n // is set, it's used to filter down the Agencys to only the Agency\n // that Agent is a part of.\n newFormState.AgentId = ''\n newFormState.Agent = ''\n this.props.SetSelectedAgentId('')\n }\n }\n newFormState.Agency = label\n this.formik.setValues(newFormState)\n return newFormState\n }\n\n agencyAutoSelect = ({ label, value, }) => {\n const newFormState = this.agencySetFormValues({ label, value, })\n if ((label && newFormState.AgencyId > 0 ) && this.props.selectedAgencyId !== newFormState.AgencyId) {\n this.props.SetSelectedAgencyId(newFormState.AgencyId)\n }\n else if (!label && !newFormState.AgencyId) {\n this.props.SetSelectedAgencyId()\n }\n }\n\n agencyFormCard = (values) => {\n const { AgencyId, } = values\n const { agency, targetLandowner, } = this.props\n let markup\n // Don't render the Agency if there is a Burner/Landowner selected, even if there is an Agency set\n // This is because the Agency will be autoset on the backend if/when an Agent is set on the Application\n // so that the App/Permit can be searched by either the Agent or the Agent's Agency they're associated with\n if (targetLandowner !== 'Agency') {\n return markup\n }\n else if (AgencyId && !agency) {\n markup = \n }\n const {\n readOnly,\n agencies,\n isDnr,\n online,\n selectedAgencyId,\n canSelectLandowner,\n isAgent,\n } = this.props\n \n markup = \n\n if (agencies && agencies.length > 0) {\n markup = \n \n \n \n \n \n \n }\n markup = \n \n
    Landowner
    \n {\n isAgent &&

    Your Agency is chosen by default and cannot be changed because you are an Agent.

    \n }\n \n \n \n {\n selectedAgencyId > 0 && isDnr\n ? View Profile\n :

    (ID: {selectedAgencyId})

    \n }\n { markup }\n {\n isDnr && !readOnly && !AgencyId && \n Unable to find the Agency you're looking for? Add them here.\n {\n !online &&\n \n }\n \n }\n \n {\n agency && <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n
    \n
    \n
    \n\n return { markup }\n }\n\n agentFormCard = (values, errors) => {\n const { MailPermitToAgentFlag, AgentId, } = values\n const { agent, selectedAgentId, isAgent, } = this.props\n let markup\n if (!MailPermitToAgentFlag) {\n return markup\n }\n else if (AgentId && !agent) {\n markup = \n }\n markup = \n \n
    Agent
    \n {\n isAgent &&

    You are chosen by default and cannot be changed because you are an Agent.

    \n }\n \n \n { this.agentForm(values, errors) }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n agent && selectedAgentId && <>\n \n \n \n \n { this.state.agentEmailError && {this.state.agentEmailError} }\n \n \n \n { this.addressForm(agent, 'Agent') }\n \n \n { this.phoneForms(agent, 'Agent') }\n \n \n }\n \n
    \n
    \n\n return { markup }\n }\n\n landownerAutoSelect = ({ label, value, }) => {\n const newFormState = this.landownerSetFormValues({ label, value, })\n if ((label && newFormState.BurnerId > 0) && this.props.selectedLandownerId !== newFormState.BurnerId) {\n this.props.SetSelectedLandownerId(newFormState.BurnerId)\n }\n else if (!label && !newFormState.BurnerId) {\n this.props.SetSelectedLandownerId()\n }\n }\n\n landownerSetFormValues = ({ label, value, }) => {\n if (!this.formik) {\n return {}\n }\n const newFormState = { ...this.formik.values, }\n if (value) {\n newFormState.BurnerId = value\n if (!!newFormState.AgencyId && parseInt(newFormState.AgencyId > 0)) {\n newFormState.AgencyId = ''\n }\n }\n else if (!value) {\n newFormState.BurnerId = ''\n this.props.SetSelectedLandownerId('')\n }\n newFormState.Landowner = label\n if (this.formik.values.BurnerId !== newFormState.BurnerId) {\n newFormState.BurnerPermitAddressId = ''\n newFormState.BurnerPermitPrimaryPhoneId = ''\n newFormState.BurnerPermitSecondaryPhoneId = ''\n }\n this.formik.setValues(newFormState)\n return newFormState\n }\n\n personSelect = () => {\n const { readOnly, selectedLandownerId, canSelectLandowner, } = this.props\n return \n \n { selectedLandownerId > 0 && canSelectLandowner && View Profile }\n \n \n }\n\n personFormCard = (values) => {\n const { BurnerId, } = values\n const { readOnly, targetLandowner, } = this.props\n let markup\n if (targetLandowner !== 'Person') {\n return markup\n }\n else if (BurnerId && !this.props.burner) {\n markup = \n }\n const { canSelectLandowner, online, burner, } = this.props\n const showBurnerEmail = (canSelectLandowner && BurnerId && burner)\n markup =\n \n \n
    Landowner
    \n \n { this.personForm() }\n \n {\n showBurnerEmail &&\n \n \n \n \n \n \n }\n
    \n {\n BurnerId > 0\n ? \n \n { this.addressForm(burner, 'Burner') }\n \n \n { this.phoneForms(burner, 'Burner') }\n \n \n : \n \n {\n canSelectLandowner && !readOnly && <>\n Unable to find who you're looking for? Add them here.\n { !online && }\n \n }\n \n \n }\n
    \n
    \n\n return { markup }\n }\n\n renderForms = (values, errors) => {\n return <>\n \n { this.personFormCard(values) }\n { this.agencyFormCard(values) }\n \n \n { this.agentFormCard(values, errors) }\n \n \n }\n\n contactDataProps = [\n 'BurnerPermitAddressId', 'BurnerPermitPrimaryPhoneId', 'BurnerPermitSecondaryPhoneId',\n 'AgentPermitAddressId', 'AgentPermitPrimaryPhoneId', 'AgentPermitSecondaryPhoneId',\n ]\n\n onFormChange = (changedEntries) => {\n // This handles instances when a user chooses Address and Phones for a Agent, then\n // unchecks the mail the permit to the Agent.\n // This will maintain the selected address and phone IDs across the form state change\n const entries = changedEntries.map(x => x[0]).filter(x => this.contactDataProps.includes(x))\n if (this.formik && entries.length) {\n let prop, value\n for (let i = 0, len = entries.length; i < len; i++) {\n prop = entries[i]\n value = this.formik.values[prop]\n this.props.SetContactData(prop, value)\n }\n }\n this.validateSection({ submit: false, }).then(isValid => {\n this.setState({ isValid, })\n })\n }\n \n setTargetLandowner = evt => {\n const { target, } = evt.target.dataset\n this.props.SetTargetLandowner(target || '')\n }\n\n setMailToAgent = evt => {\n const { checked, } = evt.target\n this.props.SetMailToAgent(checked)\n }\n \n setFormikNode = node => this.formik = node\n\n render () {\n const {\n activeBurnPermit,\n readOnly,\n targetLandowner,\n sectionIsLoading,\n isAgent,\n isDnr,\n } = this.props\n let children = null\n if (!activeBurnPermit || sectionIsLoading) {\n children = \n \n \n }\n else {\n children = \n {({ values, errors, }) => (\n \n \n \n \n \n \n \n {\n !readOnly && (isDnr || isAgent) && \n

    \n Choose the Landowner Type:\n
    \n A Landowner or Agency is now always required.\n

    \n \n \n Person\n \n \n Agency\n \n \n \n }\n \n

    \n Check to also Email Burn Permit documents to an Agent:\n {\n isAgent && <>\n
    \n This is checked by default and cannot be changed because you are an Agent.\n \n }\n

    \n \n \n \n \n \n
    \n \n
    \n \n
    \n {\n targetLandowner === 'Agency' && \n \n

    \n You acknowledge the selected Agency owns the property the proposed burning will occur.\n If the proposed burn will occur on another person's property, you should specify that person as the landowner.\n The application and permit will still be searchable by the Agent's Agency name.\n

    \n \n
    \n }\n
    \n
    \n \n
    \n { this.renderForms(values, errors) }\n \n )}\n \n }\n \n return (\n \n { children }\n \n )\n }\n}\n\nfunction mapStateToProps (state, props) {\n const {\n agentId: selectedAgentId,\n agencyId: selectedAgencyId,\n landownerId: selectedLandownerId,\n targetLandowner,\n sectionIsLoading,\n } = state.ApplicantInfo\n let agentsForAgencyFilter\n if (selectedAgencyId > 0) {\n agentsForAgencyFilter = a => {\n return (a.PersonId === selectedAgentId || (a.Agencies.exists() && a.Agencies.toRefArray().map(ag => ag.AgencyId).includes(selectedAgencyId)))\n }\n }\n let agenciesForAgentFilter\n if (selectedAgentId > 0) {\n agenciesForAgentFilter = a => {\n return (a.AgencyId === selectedAgencyId || (a.People.exists() && a.People.toRefArray().map(p => p.PersonId).includes(selectedAgentId)))\n }\n }\n let selectedLandownerFilter\n if (selectedLandownerId > 0) {\n selectedLandownerFilter = l => {\n return l.Value === selectedLandownerId\n }\n }\n\n let agents = [], agencies = [], landowners = []\n agents = agentsForSelectSelector(state, agentsForAgencyFilter)\n if (targetLandowner === 'Person') {\n landowners = landownerSelector(state, selectedLandownerFilter)\n }\n else if (targetLandowner === 'Agency') {\n agencies = agenciesForSelectSelector(state, agenciesForAgentFilter)\n }\n\n const { applications, activeBurnPermitId, } = state.BurnPermitForm\n const isActive = applications[activeBurnPermitId].activeStep === props.sectionId\n return {\n selectedAgentId,\n selectedAgencyId,\n selectedLandownerId,\n targetLandowner,\n sectionIsLoading,\n agents,\n agencies,\n landowners,\n isActive,\n online : appIsOnlineSelector(state),\n canSelectLandowner : userCanSelectPermitLandowner(state),\n activeBurnPermit : permitForApplicantInfoSelector(state),\n burner : applicantInfoBurnerSelector(state),\n agent : applicantInfoAgentSelector(state),\n agency : applicantInfoAgencySelector(state, selectedAgencyId),\n }\n}\n\nconst mapDispatchToProps = {\n GetApplicantInfoData : ApplicantInfoActions.getApplicantInfoData,\n ResetApplicantInfo : ApplicantInfoActions.resetApplicantInfo,\n SetApplicantInfo : ApplicantInfoActions.setApplicantInfo,\n SetSelectedAgencyId : ApplicantInfoActions.setSelectedAgencyId,\n SetSelectedAgentId : ApplicantInfoActions.setSelectedAgentId,\n SetSelectedLandownerId : ApplicantInfoActions.setSelectedLandownerId,\n SetMailToAgent : ApplicantInfoActions.setMailToAgent,\n SetContactData : ApplicantInfoActions.setContactData,\n SetTargetLandowner : ApplicantInfoActions.setTargetLandowner,\n UpdateApplicantInfo : ApplicantInfoActions.updateApplicantInfo,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ApplicantInfoSection)\n","// Libraries\r\nimport React from 'react'\r\nimport { Formik, Field, } from 'formik'\r\nimport { connect, } from 'react-redux'\r\nimport { isEmpty, } from 'lodash'\r\nimport { FormGroup, Row, Col, Card, CardBody, } from 'reactstrap'\r\nimport { number, func, array, object, bool, } from 'prop-types'\r\n\r\n// Components\r\nimport BurnPermitFormSection from './FormSection'\r\nimport AuditData from '../AuditData'\r\nimport { CheckBoxes, PopoverButton, ValidatingField, RequiredLabel, } from '../FormControls'\r\n\r\n// Reducers\r\nimport ApiActions from '../../redux/ApiRedux'\r\nimport BurnPermitAreaActions from '../../redux/BurnPermitAreaRedux'\r\n\r\n// Selectors\r\nimport { burnPermitAreaByIdSelector, burnTypesCheckboxSelector, } from '../../selectors/selectors'\r\n\r\n// Models\r\nimport BurnPermitArea from '../../models/BurnPermitArea'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\nimport retry from '../../utilities/retry'\r\nimport Effect from '../Effect'\r\n\r\nconst valSchema = BurnPermitArea.validationSchema\r\n\r\nclass BurnPermitAreaSection extends React.Component {\r\n \r\n constructor (props) {\r\n super(props)\r\n this.validateSection = this.validateSection.bind(this)\r\n }\r\n \r\n static propTypes = {\r\n sectionId : number.isRequired,\r\n BurnTypes : array.isRequired,\r\n BurnPermitArea : object,\r\n burnPermitAreaId : number,\r\n Failure : func,\r\n UpdateBurnPermitArea : func,\r\n GetBurnAreaInfo : func,\r\n readOnly : bool,\r\n online : bool,\r\n isActive : bool,\r\n }\r\n\r\n static defaultProps = {\r\n readOnly: false,\r\n }\r\n \r\n state = {\r\n isValid: '',\r\n }\r\n componentDidMount () {\r\n const { online, GetBurnAreaInfo, burnPermitAreaId, isActive, } = this.props\r\n if (online && isActive) {\r\n GetBurnAreaInfo(burnPermitAreaId)\r\n }\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n if (prevProps.isActive !== true && this.props.isActive === true) {\r\n this.props.GetBurnAreaInfo(this.props.burnPermitAreaId)\r\n }\r\n }\r\n\r\n async validateSection ({ evt, submit = true, }) {\r\n if (!this.formik) {\r\n return await retry(this.validateSection, { submit, }, 100)\r\n }\r\n stopEvent(evt)\r\n if (this.formik) {\r\n const errs = await this.formik.validateForm()\r\n const inputsWithError = Object.keys(errs)\r\n const isValid = !errs || inputsWithError.length === 0\r\n if (isValid && submit) {\r\n this.formik.submitForm()\r\n }\r\n else if (inputsWithError.length > 0) {\r\n for (let i = 0, len = inputsWithError.length; i < len; i++) {\r\n this.formik.setFieldTouched(inputsWithError[i])\r\n }\r\n }\r\n return isValid\r\n }\r\n return false\r\n }\r\n\r\n submit = values => {\r\n this.props.UpdateBurnPermitArea(values)\r\n }\r\n\r\n setFormikNode = node => this.formik = node\r\n \r\n onFormChange = () => {\r\n this.validateSection({ submit: false, }).then(isValid => {\r\n this.setState({ isValid, })\r\n })\r\n }\r\n render () {\r\n \r\n const { readOnly, BurnPermitArea, } = this.props\r\n\r\n let form = null\r\n if (!isEmpty(BurnPermitArea)) {\r\n form = \r\n \r\n \r\n {({ values, }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n Size of unit area (acres)\r\n \r\n This is the size in acres of the area your piled forest debris was generated from.\r\n
      \r\n
    • For Pile Burns = the area piled forest material is accumulated from
    • \r\n
    • For Underburns = found "as-is" in nature
    • \r\n
    \r\n \r\n }\r\n />\r\n \r\n
    \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n
    \r\n \r\n )}\r\n \r\n
    \r\n
    \r\n }\r\n\r\n return \r\n { form }\r\n \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { online, } = state.offline\r\n const { applications, activeBurnPermitId, } = state.BurnPermitForm\r\n const isActive = applications[activeBurnPermitId].activeStep === props.sectionId\r\n return {\r\n online,\r\n isActive,\r\n BurnTypes : burnTypesCheckboxSelector(state),\r\n BurnPermitArea : burnPermitAreaByIdSelector(state, props.burnPermitAreaId),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n Failure : ApiActions.failure,\r\n GetBurnAreaInfo : BurnPermitAreaActions.getBurnAreaInfo,\r\n UpdateBurnPermitArea : BurnPermitAreaActions.updateBurnPermitArea,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitAreaSection)","import { objHasProp, } from '../utilities'\r\n\r\nexport const getBasemapLayer = (map) => {\r\n const { items, } = map.basemap.baseLayers\r\n return items.filter(i => i.visible)[0]\r\n}\r\n\r\nexport const getColRowFromXy = (x, y, level, map) => {\r\n const { tileInfo, } = getBasemapLayer(map)\r\n const { resolution, } = tileInfo.lods[level]\r\n const { cols, rows, } = tileInfo.toJSON()\r\n const col = Math.floor((x - tileInfo.origin.x) / (cols * resolution))\r\n const row = Math.floor((tileInfo.origin.y - y) / (rows * resolution))\r\n return [ col, row, ]\r\n}\r\n\r\nexport const getTileUrlsByExtent = (extent, level, map) => {\r\n const layer = getBasemapLayer(map)\r\n const urls = []\r\n const { xmin, xmax, ymin, ymax, } = extent\r\n const [ col1, row1, ] = getColRowFromXy(xmin, ymin, level, map)\r\n const [ col2, row2, ] = getColRowFromXy(xmax, ymax, level, map)\r\n let minCol, maxCol, minRow, maxRow\r\n if (col1 < col2) {\r\n minCol = col1\r\n maxCol = col2\r\n }\r\n else {\r\n minCol = col2\r\n maxCol = col1\r\n }\r\n if (row1 < row2) {\r\n minRow = row1\r\n maxRow = row2\r\n }\r\n else {\r\n minRow = row2\r\n maxRow = row1\r\n }\r\n for (var i = minCol; i <= maxCol; i++) {\r\n for (var j = minRow; j <= maxRow; j++) {\r\n urls.push(layer.getTileUrl(level, j, i))\r\n }\r\n }\r\n return urls\r\n}\r\n\r\nfunction popupField (field) {\r\n return {\r\n fieldName : field.name,\r\n label : field.label || field.name,\r\n visible : objHasProp(field, 'visible') ? field.visible : true,\r\n }\r\n}\r\n\r\nexport const buildPopupTemplate = (layer) => {\r\n const template = {\r\n title : layer.title,\r\n content : [\r\n {\r\n type : 'fields',\r\n fieldInfos : layer.fields.map(popupField),\r\n },\r\n ],\r\n }\r\n if (layer.actions) {\r\n template.actions = layer.actions\r\n }\r\n return template\r\n}\r\n","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { isEqual, cloneDeep, difference, } from 'lodash'\r\nimport { object, string, bool, func, array, number, oneOfType, } from 'prop-types'\r\n\r\n// ESRI ES Modules\r\nimport ArcGISMap from '@arcgis/core/Map'\r\nimport MapView from '@arcgis/core/views/MapView'\r\nimport { addProxyRule, } from '@arcgis/core/core/urlUtils'\r\nimport config from '@arcgis/core/config'\r\nimport FeatureLayer from '@arcgis/core/layers/FeatureLayer'\r\nimport GraphicsLayer from '@arcgis/core/layers/GraphicsLayer'\r\nimport GeoJSONLayer from '@arcgis/core/layers/GeoJSONLayer'\r\nimport Sketch from '@arcgis/core/widgets/Sketch'\r\nimport Graphic from '@arcgis/core/Graphic'\r\nimport { geographicToWebMercator, } from '@arcgis/core/geometry/support/webMercatorUtils'\r\nimport Extent from '@arcgis/core/geometry/Extent'\r\nimport BasemapGallery from '@arcgis/core/widgets/BasemapGallery'\r\nimport Compass from '@arcgis/core/widgets/Compass'\r\nimport Expand from '@arcgis/core/widgets/Expand'\r\nimport Fullscreen from '@arcgis/core/widgets/Fullscreen'\r\nimport Home from '@arcgis/core/widgets/Home'\r\nimport LayerList from '@arcgis/core/widgets/LayerList'\r\nimport Legend from '@arcgis/core/widgets/Legend'\r\nimport Locate from '@arcgis/core/widgets/Locate'\r\n\r\n// Reducers\r\nimport MapActions from '../redux/MapRedux'\r\nimport AppActions from '../redux/AppRedux'\r\n\r\n// Symbols\r\nimport { POINT_SYMBOL, POLYLINE_SYMBOL, POLYGON_SYMBOL, } from '../config/map/symbols'\r\n\r\n// Map Layers\r\nimport FeatureLayers from '../config/map/featureLayers'\r\n\r\n// Utilities\r\nimport { objHasProp, } from '../utilities'\r\nimport retry from '../utilities/retry'\r\nimport { getTileUrlsByExtent, buildPopupTemplate, getBasemapLayer, } from '../utilities/map'\r\n\r\n// Selectors\r\nimport { getUserToken, } from '../selectors/userSelectors'\r\nimport { appIsOnlineSelector, } from '../selectors/selectors'\r\nimport { hiddenLayerIdsSelector, mapStateSelector, } from '../selectors/mapSelectors'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_REQUEST_PROXY_URL, } = process.env\r\n\r\n\r\n// Pad the extent with some buffer in case any side of the extent is near the\r\n// edge of a row or col of a tile\r\nconst extentBufferDegrees = 0.15 // this is approximately 10 miles\r\n\r\nclass ESRIMap extends React.Component {\r\n\r\n static propTypes = {\r\n online : bool,\r\n ShowLoading : func,\r\n HideLoading : func,\r\n MapLoading : func,\r\n MapDoneLoading : func,\r\n SetLatLong : func,\r\n drawCallback : func,\r\n showControls : bool,\r\n center : array,\r\n zoom : number,\r\n mapData : array,\r\n mapLayers : array,\r\n graphics : array,\r\n layerId : string,\r\n overlapGraphics : array,\r\n canEdit : bool,\r\n editGraphic : object,\r\n pointSymbol : object,\r\n polygonSymbol : object,\r\n polylineSymbol : object,\r\n layerTitle : string,\r\n GetLatLongFromMap : bool,\r\n IncludeIntersectingFeatures : bool,\r\n featureLayers : array,\r\n geojsonLayers : array,\r\n hiddenLayerIds : array,\r\n TargetFeatureLayerIds : array,\r\n HideLayer : func,\r\n ShowLayer : func,\r\n downloadMapData : bool,\r\n ToggleDownloadMapData : func,\r\n GraphicsOverlapFeatures : func,\r\n ActiveMapId : func,\r\n MapDragEnd : func,\r\n config : string,\r\n token : string,\r\n legendOpen : bool,\r\n parentRef : oneOfType([ object, func, ]),\r\n onLayerViewCreate : func,\r\n onIntersectingFeaturesChanged : func,\r\n }\r\n\r\n static defaultProps = {\r\n actions : {},\r\n showControls : true,\r\n center : [ -120.4443, 47.2529, ],\r\n zoom : 5,\r\n mapData : [],\r\n graphics : [],\r\n editGraphic : {},\r\n hiddenLayerIds : [],\r\n polygonSymbol : POLYGON_SYMBOL,\r\n pointSymbol : POINT_SYMBOL,\r\n polylineSymbol : POLYLINE_SYMBOL,\r\n canAdd : false,\r\n canEdit : false,\r\n canDelete : false,\r\n legendOpen : true,\r\n parentRef : null,\r\n featureLayers : FeatureLayers,\r\n geojsonLayers : [],\r\n }\r\n\r\n state = {\r\n layerViews: {},\r\n }\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n config.request.proxyUrl = REACT_APP_REQUEST_PROXY_URL\r\n // Proxy Rules use pattern matching to force the use of the proxy service\r\n // for all resource requests that match the provided prefixes.\r\n addProxyRule({\r\n urlPrefix : 'https://wamas.watech.wa.gov',\r\n proxyUrl : REACT_APP_REQUEST_PROXY_URL,\r\n })\r\n addProxyRule({\r\n urlPrefix : 'https://gis.dnr.wa.gov',\r\n proxyUrl : REACT_APP_REQUEST_PROXY_URL,\r\n })\r\n \r\n this.props.MapLoading()\r\n\r\n this.setLatLong = this.setLatLong.bind(this)\r\n this.loadMap = this.loadMap.bind(this)\r\n this.checkIfGraphicsOverlapLayerFeatures = this.checkIfGraphicsOverlapLayerFeatures.bind(this)\r\n this.checkLayersAreVisible = this.checkLayersAreVisible.bind(this)\r\n this.showAllLayers = this.showAllLayers.bind(this)\r\n this.updateVisibleLayers = this.updateVisibleLayers.bind(this)\r\n }\r\n\r\n componentDidMount () {\r\n this.loadMap()\r\n }\r\n\r\n componentDidUpdate (prevProps, prevState) {\r\n const { mapData, graphics, GetLatLongFromMap, layerId, overlapGraphics , } = this.props\r\n\r\n if (this.map !== null && !isEqual(prevProps.mapData, mapData)) {\r\n this.drawGraphics()\r\n }\r\n if (this.view !== null && this.graphicsLayer && !isEqual(prevProps.graphics, graphics)) {\r\n this.graphicsLayer.removeAll()\r\n for (let g = 0, gLen = graphics.length; g < gLen; g++) {\r\n this.addGraphic(graphics[g])\r\n }\r\n this.view.goTo(this.graphicsLayer.graphics)\r\n }\r\n\r\n if (this.view && prevProps.GetLatLongFromMap === false && GetLatLongFromMap === true) {\r\n this.configureMapClick()\r\n }\r\n else if (GetLatLongFromMap !== true) {\r\n this.disableMapClick()\r\n }\r\n\r\n if (!prevProps.downloadMapData && this.props.downloadMapData) {\r\n this.downloadTiles()\r\n }\r\n\r\n if (!!layerId && Array.isArray(overlapGraphics) && overlapGraphics.length) {\r\n if (!isEqual(prevProps.overlapGraphics, overlapGraphics) || !isEqual(prevProps.layerId, layerId)) {\r\n this.checkIfGraphicsOverlapLayerFeatures()\r\n }\r\n }\r\n if (this.Legend && Object.entries(prevState.layerViews).length !== Object.entries(this.state.layerViews).length) {\r\n this.buildLegend()\r\n }\r\n\r\n const { hiddenLayerIds, } = this.props\r\n if (!isEqual(prevProps.hiddenLayerIds, hiddenLayerIds)) {\r\n const layersToShow = difference(prevProps.hiddenLayerIds, hiddenLayerIds)\r\n const layersToHide = difference(hiddenLayerIds, prevProps.hiddenLayerIds)\r\n this.updateVisibleLayers(layersToShow, layersToHide)\r\n }\r\n }\r\n\r\n updateVisibleLayers (layersToShow, layersToHide) {\r\n const { layerViews, } = this.state\r\n const { TargetFeatureLayerIds, hiddenLayerIds, } = this.props\r\n\r\n // Default the visible property if the layerId is in the hiddenLayerIds prop\r\n for (const layer of this.map.allLayers) {\r\n layer.visible = hiddenLayerIds.includes(layer.id) === false\r\n }\r\n\r\n let layerId\r\n // update both the layerview state and the view layerviews\r\n // because they can be out of sync sometimes\r\n for (let key in layerViews) {\r\n const lView = layerViews[key]\r\n layerId = lView.layer.id\r\n if (TargetFeatureLayerIds && !TargetFeatureLayerIds.includes(layerId)) {\r\n continue\r\n }\r\n\r\n if (layersToShow.includes(layerId)) {\r\n lView.visible = true\r\n }\r\n else if (layersToHide.includes(layerId)) {\r\n lView.visible = false\r\n }\r\n }\r\n\r\n for (const layerView of this.view.layerViews) {\r\n layerId = layerView.layer.id\r\n if (TargetFeatureLayerIds && !TargetFeatureLayerIds.includes(layerId)) {\r\n continue\r\n }\r\n\r\n if (layersToShow.includes(layerId)) {\r\n layerView.visible = true\r\n }\r\n else if (layersToHide.includes(layerId)) {\r\n layerView.visible = false\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount () {\r\n if (this.props.parentRef && this.props.parentRef.current) {\r\n this.props.parentRef.current = null\r\n }\r\n\r\n if (this.map) {\r\n this.map.destroy()\r\n }\r\n\r\n // Clear the active map id so that the selectors\r\n // don't cache the current map if the user comes right back\r\n this.props.ActiveMapId()\r\n }\r\n \r\n handleFail = (e) => {\r\n console.error(e)\r\n this.setState({ status: 'failed', })\r\n }\r\n\r\n checkIfGraphicsOverlapLayerFeatures () {\r\n if (this.state.layerViewsLoading) {\r\n setTimeout(this.checkIfGraphicsOverlapLayerFeatures, 250)\r\n return\r\n }\r\n const layerView = this.state.layerViews[this.props.layerId]\r\n // Wait until the layer is visible in the map and done updating\r\n if (!layerView.visible || layerView.updating) {\r\n if (this.hasRecursed > 5) {\r\n console.error(`The expected layer ${this.props.layerId} did not load in time`)\r\n this.hasRecursed = 0\r\n return\r\n }\r\n layerView.visible = true\r\n this.hasRecursed++\r\n setTimeout(this.checkIfGraphicsOverlapLayerFeatures, 250)\r\n return\r\n }\r\n this.hasRecursed = 0\r\n \r\n const { overlapGraphics, } = this.props\r\n for (let i = 0, len = overlapGraphics.length; i < len; i++) {\r\n const query = { spatialRelationship: 'intersects', }\r\n const graphic = overlapGraphics[i]\r\n if (graphic.geometry) {\r\n query.geometry = graphic.geometry\r\n }\r\n layerView.queryFeatures(query).then(resp => {\r\n if (resp.features.length > 0) {\r\n this.props.GraphicsOverlapFeatures(true, resp.features)\r\n }\r\n })\r\n }\r\n }\r\n\r\n getExtentForGraphic = (graphic) => {\r\n let extent = new Extent({\r\n xmin : graphic.geometry.x - extentBufferDegrees,\r\n xmax : graphic.geometry.x + extentBufferDegrees,\r\n ymin : graphic.geometry.y - extentBufferDegrees,\r\n ymax : graphic.geometry.y + extentBufferDegrees,\r\n })\r\n if (extent.spatialReference.isGeographic) {\r\n extent = geographicToWebMercator(extent)\r\n }\r\n return extent\r\n }\r\n\r\n downloadTiles = async () => {\r\n if (!this.map) {\r\n await retry(this.downloadTiles, null, 100)\r\n return\r\n }\r\n const { tileInfo, } = getBasemapLayer(this.map)\r\n if (tileInfo) {\r\n let graphicsLayer = this.map.layers.filter(l => l.type === 'graphics')\r\n if (graphicsLayer && graphicsLayer.items.length) {\r\n graphicsLayer = graphicsLayer.items[0]\r\n }\r\n let extent, gLen = graphicsLayer.graphics.length\r\n if (gLen > 1) {\r\n let xmin, xmax, ymin, ymax\r\n for (var i = 0; i < gLen; i++) {\r\n const { geometry, } = graphicsLayer.graphics.items[i]\r\n if (!xmin || geometry.x < xmin) {\r\n xmin = geometry.x - extentBufferDegrees\r\n }\r\n if (!xmax || geometry.x > xmax) {\r\n xmax = geometry.x + extentBufferDegrees\r\n }\r\n if (!ymin || geometry.y < ymin) {\r\n ymin = geometry.y - extentBufferDegrees\r\n }\r\n if (!ymax || geometry.y > ymax) {\r\n ymax = geometry.y + extentBufferDegrees\r\n }\r\n }\r\n extent = new Extent({\r\n xmin : xmin,\r\n xmax : xmax,\r\n ymin : ymin,\r\n ymax : ymax,\r\n })\r\n }\r\n else {\r\n extent = this.getExtentForGraphic(graphicsLayer.graphics.items[0])\r\n }\r\n \r\n if (extent.spatialReference.isGeographic) {\r\n extent = geographicToWebMercator(extent)\r\n }\r\n \r\n let urls = []\r\n // For the high zoom levels, macro view, use the general extent of all graphics\r\n let minLevel = 5, maxLevel = 10\r\n // If it's a single graphic, just keep going all the way down\r\n if (graphicsLayer.graphics.length === 1) {\r\n maxLevel = 15\r\n }\r\n var l, j, jLen = graphicsLayer.graphics.length\r\n for (l = minLevel; l < maxLevel; l++) {\r\n const tileUrls = getTileUrlsByExtent(extent, l, this.map)\r\n urls = [ ...urls, ...tileUrls, ]\r\n }\r\n\r\n if (graphicsLayer.graphics.length > 1) {\r\n // For the medium zoom levels, get tile urls for each graphic, creating a half\r\n let minLevel = 10, maxLevel = 15\r\n for (l = minLevel; l < maxLevel; l++) {\r\n for (j = 0; j < jLen; j++) {\r\n const _ext = this.getExtentForGraphic(graphicsLayer.graphics.items[j])\r\n const tileUrls = getTileUrlsByExtent(_ext, l, this.map)\r\n urls = [ ...urls, ...tileUrls, ]\r\n }\r\n }\r\n }\r\n\r\n console.log(`Total ${urls.length} tiles`)\r\n\r\n urls = [ ...new Set(urls), ]\r\n\r\n console.log(`Total ${urls.length} unique tiles`)\r\n const reqs = []\r\n var uLen = urls.length\r\n for (var u = 0; u < uLen; u++) {\r\n reqs.push(fetch(urls[u]))\r\n }\r\n await Promise.all(reqs)\r\n this.props.ToggleDownloadMapData()\r\n }\r\n }\r\n\r\n drawCallback = (graphics) => {\r\n const { drawCallback, } = this.props\r\n if (typeof drawCallback === 'function') {\r\n this.props.drawCallback(graphics)\r\n }\r\n }\r\n\r\n hasRecursed = 0\r\n\r\n drawGraphics = () => {\r\n let { mapData, } = this.props\r\n mapData = mapData || []\r\n\r\n // Clear any popups that may be open\r\n this.view.popup.close()\r\n\r\n for (let i = 0, len = mapData.length; i < len; i++) {\r\n const layer = mapData[i]\r\n if (!layer || !layer.layerId) {\r\n continue\r\n }\r\n const mapLayer = this.map.layers.items.find(l => l.id === layer.layerId.toString())\r\n if (!mapLayer) {\r\n this.hasRecursed++\r\n if (this.hasRecursed === 5) {\r\n throw new Error('There is an issue displaying the map symbols at this time. Try refreshing the page to fix the problem.')\r\n }\r\n this.buildGraphicsLayers()\r\n return\r\n }\r\n // Remove all graphics from the layer since we're (re)building with every state change\r\n mapLayer.removeAll()\r\n\r\n // If no data in the layer\r\n if (!layer.data || layer.data.length === 0) {\r\n // Move on to the next layer\r\n continue\r\n }\r\n \r\n let popupTemplate\r\n if (objHasProp(layer, 'fields')) {\r\n // Build a popup template to use for the feature info popup\r\n popupTemplate = buildPopupTemplate(layer)\r\n }\r\n \r\n const graphics = []\r\n if (Array.isArray(layer.data) !== true) {\r\n throw new Error('ESRIMap expected an array for the props.mapData[]layer.data, but received something else')\r\n }\r\n for (let i = 0, len = layer.data.length; i < len; i++) {\r\n const layerObj = layer.data[i]\r\n const _graphic = new Graphic({\r\n geometry: layerObj.geometry || {\r\n type : 'point',\r\n longitude : layerObj.longitude || layerObj.attributes.longitude,\r\n latitude : layerObj.latitude || layerObj.attributes.latitude,\r\n },\r\n attributes : layerObj.attributes,\r\n // Fallback to the default point symbol\r\n symbol : layerObj.symbol || cloneDeep(this.props.pointSymbol),\r\n })\r\n _graphic.popupTemplate = popupTemplate || layerObj.popupTemplate\r\n graphics.push(_graphic)\r\n }\r\n mapLayer.addMany(graphics)\r\n if (graphics.length) {\r\n this.view.goTo(graphics)\r\n }\r\n }\r\n }\r\n\r\n addLayersToMap = () => {\r\n const { mapLayers, } = this.props\r\n if (Array.isArray(mapLayers)) {\r\n this.map.addMany(mapLayers)\r\n }\r\n }\r\n\r\n buildGraphicsLayers = () => {\r\n const { mapData, } = this.props\r\n\r\n for (let i = 0, len = mapData.length; i < len; i++) {\r\n const layer = mapData[i]\r\n if (!layer) {\r\n continue\r\n }\r\n const graphicsLayer = new GraphicsLayer({\r\n id : layer.layerId,\r\n title : layer.layerTitle,\r\n })\r\n this.map.add(graphicsLayer)\r\n }\r\n this.drawGraphics()\r\n }\r\n\r\n createMapControls () {\r\n\r\n const targetWidgetLocation = 'top-left'\r\n\r\n // Keep the Zoom widget to provide a more accessible method to zoom in/out\r\n // in case users have a disability or pinch to zoom is difficult to use.\r\n this.view.ui.move('zoom', 'bottom-left')\r\n\r\n const basemapGallery = new BasemapGallery({\r\n view : this.view,\r\n container : document.createElement('div'),\r\n group : 'toolbarGroup',\r\n })\r\n\r\n const bgExpand1 = new Expand({\r\n view : this.view,\r\n content : basemapGallery.domNode,\r\n container : document.createElement('div'),\r\n expandIconClass : 'esri-icon-basemap',\r\n })\r\n\r\n const compassWidget = new Compass({\r\n view : this.view,\r\n container : document.createElement('div'),\r\n })\r\n\r\n const fullscreen = new Fullscreen({\r\n view : this.view,\r\n container : document.createElement('div'),\r\n })\r\n\r\n const homeWidget = new Home({\r\n view: this.view,\r\n })\r\n\r\n const layerList = new LayerList({\r\n container : document.createElement('div'),\r\n view : this.view,\r\n })\r\n\r\n const locate = new Locate({\r\n view: this.view,\r\n })\r\n\r\n const layerListExpand = new Expand({\r\n // see https://developers.arcgis.com/javascript/latest/guide/esri-icon-font/\r\n expandIconClass : 'esri-icon-layer-list',\r\n view : this.view,\r\n content : layerList.domNode,\r\n })\r\n\r\n this.view.ui.add(layerListExpand, targetWidgetLocation)\r\n this.view.ui.add(bgExpand1, targetWidgetLocation)\r\n this.view.ui.add(compassWidget, targetWidgetLocation)\r\n this.view.ui.add(fullscreen, targetWidgetLocation)\r\n this.view.ui.add(homeWidget, targetWidgetLocation)\r\n this.view.ui.add(locate, targetWidgetLocation)\r\n\r\n this.buildLegend()\r\n }\r\n\r\n // this is a crude approach, but whenever users load a map, navigate away, then come back, especially on the dashboard\r\n // the legend is constructed before the feature layers are added to the map and ready, so it tries to render a legend\r\n // for all layers, including the graphics layers (permits, requests, etc.) which are not supported\r\n buildLegend = () => {\r\n if (this.Legend) {\r\n this.Legend.destroy()\r\n this.Legend = null\r\n }\r\n const legend = new Legend({\r\n view : this.view,\r\n container : document.createElement('div'),\r\n layerInfos : this.getLegendLayers(),\r\n })\r\n const legendExpand = new Expand({\r\n view : this.view,\r\n expanded : this.props.legendOpen,\r\n content : legend.domNode,\r\n expandIconClass : 'esri-icon-visible',\r\n expandTooltip : 'Show map legend',\r\n collapseIconClass : 'esri-icon-non-visible',\r\n collapseTooltip : 'Hide map legend',\r\n })\r\n this.Legend = legendExpand\r\n \r\n this.view.ui.add(legendExpand, 'bottom-right')\r\n }\r\n\r\n getLegendLayers = () => {\r\n return Object.entries(this.state.layerViews).map(e => {\r\n const { layer, } = e[1]\r\n return { title: layer.title, layer, }\r\n }, [])\r\n }\r\n\r\n configureFeatureLayers = async () => {\r\n const { featureLayers, hiddenLayerIds, } = this.props\r\n const layerProms = []\r\n const layers = []\r\n let featLayer\r\n for (let i = 0, len = featureLayers.length; i < len; i++) {\r\n featLayer = new FeatureLayer(featureLayers[i])\r\n featLayer.visible = hiddenLayerIds.includes(featLayer.id) === false\r\n layers.push(featLayer)\r\n layerProms.push(this.view.whenLayerView(featLayer))\r\n }\r\n this.map.addMany(layers)\r\n const layerViews = await Promise.all(layerProms)\r\n const lvs = layerViews.reduce((acc, lv) => {\r\n acc[lv.layer.id] = lv\r\n return acc\r\n }, {})\r\n this.setState({ layerViewsLoading: false, layerViews: { ...this.state.layerViews, ...lvs, }, })\r\n }\r\n\r\n configureGeoJSONLayers = () => {\r\n const { geojsonLayers, hiddenLayerIds, } = this.props\r\n\r\n let layers = [], geoLayer\r\n for (let i = 0, len = geojsonLayers.length; i < len; i++) {\r\n geoLayer = new GeoJSONLayer(geojsonLayers[i])\r\n geoLayer.visible = hiddenLayerIds.includes(geoLayer.id) === false\r\n layers.push(geoLayer)\r\n }\r\n this.map.addMany(layers)\r\n }\r\n\r\n disableMapClick = () => {\r\n if (this.mapClickEvent) {\r\n if (typeof this.mapClickEvent['remove'] === 'function') {\r\n this.mapClickEvent.remove()\r\n }\r\n this.mapClickEvent = null\r\n }\r\n }\r\n \r\n checkLayersAreVisible () {\r\n const { layerViews, } = this.state\r\n const { TargetFeatureLayerIds, } = this.props\r\n const layerVisibility = []\r\n\r\n // check the layerview state and the view layerviews\r\n // because they can be out of sync sometimes\r\n for (let key in layerViews) {\r\n const lView = layerViews[key]\r\n if (TargetFeatureLayerIds && TargetFeatureLayerIds.includes(lView.layer.id)) {\r\n layerVisibility.push(lView.visible)\r\n }\r\n }\r\n \r\n for (const layerView of this.view.layerViews) {\r\n if (TargetFeatureLayerIds && TargetFeatureLayerIds.includes(layerView.layer.id)) {\r\n layerVisibility.push(layerView.visible)\r\n }\r\n }\r\n return layerVisibility.every(v => v === true)\r\n }\r\n \r\n showAllLayers () {\r\n this.updateVisibleLayers(this.props.TargetFeatureLayerIds, [])\r\n }\r\n\r\n async getIntersectingFeatures ({ query, recursed = false, }) {\r\n let IntersectingFeatures = []\r\n if (!this.checkLayersAreVisible()) {\r\n this.showAllLayers()\r\n if (!recursed) {\r\n return await retry(this.getIntersectingFeatures.bind(this), { query, recursed: true, }, 100)\r\n }\r\n return []\r\n }\r\n\r\n for (const layerView of this.view.layerViews) {\r\n if (this.props.TargetFeatureLayerIds.includes(layerView.layer.id)) {\r\n const resp = await layerView.queryFeatures(query)\r\n if (resp.features.length > 0) {\r\n const features = resp.features.map(f => ({ layerId: f.layer.id, attributes: f.attributes, }), [])\r\n IntersectingFeatures = [ ...IntersectingFeatures, ...features, ]\r\n }\r\n }\r\n }\r\n return IntersectingFeatures\r\n }\r\n\r\n async setLatLong (evt) {\r\n // Latitudes are +/- 0:90 and Longitudes are +/- 0:180\r\n // The precision arguments are intentionally different in \r\n // order to display the same number of decimal values\r\n const Latitude = parseFloat(evt.mapPoint.latitude.toPrecision(8))\r\n const Longitude = parseFloat(evt.mapPoint.longitude.toPrecision(9))\r\n const includeIntersecting = evt.includeIntersectingFeatures === true || this.props.IncludeIntersectingFeatures === true\r\n let intersecting = []\r\n if (includeIntersecting) {\r\n const query = {\r\n geometry: {\r\n type : 'point',\r\n longitude : Longitude,\r\n latitude : Latitude,\r\n },\r\n }\r\n intersecting = await this.getIntersectingFeatures({ query, })\r\n }\r\n this.props.SetLatLong(Latitude, Longitude)\r\n if (this.props.onIntersectingFeaturesChanged) {\r\n this.props.onIntersectingFeaturesChanged(intersecting)\r\n }\r\n }\r\n\r\n configureMapClick = () => {\r\n this.mapClickEvent = this.view.on('click', this.setLatLong)\r\n }\r\n\r\n loadMap () {\r\n\r\n this.props.ShowLoading()\r\n this.props.ActiveMapId(this.props.config)\r\n\r\n this.map = new ArcGISMap({\r\n basemap: 'streets-vector',\r\n })\r\n\r\n const view = new MapView({\r\n container : 'mapViewDiv',\r\n map : this.map,\r\n center : this.props.center,\r\n zoom : this.props.zoom,\r\n })\r\n\r\n this.view = view\r\n\r\n this.view.on('layerview-create', lv => {\r\n this.setState({ layerView: { ...this.state.layerViews, [lv.layer.id]: lv, }, })\r\n if (typeof this.props.onLayerViewCreate === 'function') {\r\n this.props.onLayerViewCreate(lv)\r\n }\r\n })\r\n\r\n this.view.on('drag', evt => {\r\n if (evt.action === 'end') {\r\n const { center, zoom, } = this.view.map\r\n this.props.MapDragEnd({ dragEvt: evt, center, zoom, })\r\n }\r\n })\r\n\r\n const { showControls, canEdit, mapData, mapLayers, GetLatLongFromMap, } = this.props\r\n\r\n if (GetLatLongFromMap === true) {\r\n this.configureMapClick()\r\n }\r\n\r\n this.setState({ layerViewsLoading: true, }, async () => { await this.configureFeatureLayers() })\r\n this.configureGeoJSONLayers()\r\n\r\n if (showControls) {\r\n this.createMapControls()\r\n }\r\n\r\n if (canEdit) {\r\n this.bindSketch()\r\n }\r\n\r\n if (mapData.length) {\r\n this.buildGraphicsLayers()\r\n }\r\n\r\n if (mapLayers) {\r\n this.addLayersToMap()\r\n }\r\n\r\n this.view.popup.on('trigger-action', evt => {\r\n if (typeof evt.action.customAction === 'function') {\r\n evt.features = [ ...this.view.popup.features, ]\r\n evt.action.customAction(evt)\r\n }\r\n })\r\n\r\n this.props.HideLoading()\r\n setTimeout(this.props.MapDoneLoading, 1)\r\n\r\n if (this.props.parentRef) {\r\n const refObj = {\r\n map : this.map,\r\n view : this.view,\r\n setLatLong : this.setLatLong,\r\n }\r\n if (typeof this.props.parentRef === 'function') {\r\n this.props.parentRef(refObj)\r\n } else {\r\n this.props.parentRef.current = refObj\r\n }\r\n }\r\n }\r\n\r\n getSymbolByGeometry = (geometry) => {\r\n if (!geometry) {\r\n return\r\n }\r\n let symbol\r\n if (objHasProp(geometry, 'x') || objHasProp(geometry, 'latitude')) {\r\n symbol = this.props.pointSymbol\r\n }\r\n else if (objHasProp(geometry, 'paths')) {\r\n symbol = this.props.polylineSymbol\r\n }\r\n else if (objHasProp(geometry, 'centroid') || objHasProp(geometry, 'rings') || objHasProp(geometry, 'coordinates')) {\r\n symbol = this.props.polygonSymbol\r\n }\r\n return symbol\r\n }\r\n\r\n /**\r\n * Called when `this.props.sketchViewModel`'s `create-complete` event is fired.\r\n */\r\n addGraphic (graphic) {\r\n let symbol = this.getSymbolByGeometry(graphic.geometry)\r\n // Create a new graphic and set its geometry to\r\n // `create-complete` event geometry.\r\n const newGraphic = new Graphic({\r\n attributes : graphic.attributes || {},\r\n geometry : geographicToWebMercator(graphic.geometry),\r\n popupTemplate : graphic.popupTemplate || {},\r\n symbol,\r\n })\r\n this.graphicsLayer.graphics.add(newGraphic)\r\n }\r\n\r\n /**\r\n * Called when the `#btn-clear` button is clicked\r\n */\r\n clearGraphic (e) {\r\n e.preventDefault()\r\n\r\n this.sketchViewModel.reset()\r\n this.graphicsLayer.removeAll()\r\n }\r\n\r\n /**\r\n * Called when the view is done rendering. This sets up the Esri JS widgets\r\n * and binds them to the component.\r\n * @param {Object} Sketch\r\n * @param {Object} GraphicsLayer\r\n */\r\n bindSketch () {\r\n const { graphics, editGraphic, layerTitle, canEdit, } = this.props\r\n\r\n this.graphicsLayer = this.map.graphicsLayer\r\n if (typeof this.graphicsLayer === 'undefined') {\r\n // GraphicsLayer to hold graphics created via sketch view model\r\n this.graphicsLayer = new GraphicsLayer({\r\n id : 'tempGraphics',\r\n title : layerTitle || 'Graphics',\r\n })\r\n this.map.add(this.graphicsLayer)\r\n }\r\n\r\n if (Array.isArray(graphics)) {\r\n for(let g = 0, gLen = graphics.length; g < gLen; g++) {\r\n this.addGraphic(graphics[g], false)\r\n }\r\n }\r\n\r\n if (editGraphic && Object.keys(editGraphic).length > 0) {\r\n this.addGraphic(editGraphic, false)\r\n }\r\n this.view.goTo(this.graphicsLayer.graphics)\r\n\r\n if (canEdit !== true) {\r\n return\r\n }\r\n\r\n const sketch = new Sketch({\r\n layer : this.graphicsLayer,\r\n view : this.view,\r\n })\r\n\r\n this.view.ui.add(sketch, 'top-right')\r\n\r\n const self = this\r\n // Listen the sketch's update-complete and update-cancel events\r\n sketch.on('update', function (evt) {\r\n const toolType = evt.toolEventInfo.type\r\n if (evt.state === 'complete') {\r\n sketch.update({\r\n tool : 'move',\r\n graphics : [ evt.graphics[0], ],\r\n })\r\n }\r\n else if (toolType === 'move-stop') {\r\n self.drawCallback(evt.graphics)\r\n sketch.complete()\r\n }\r\n })\r\n // Listen the sketch's update-complete and update-cancel events\r\n sketch.on('complete', function (evt) {\r\n this.drawCallback(evt.graphics)\r\n })\r\n }\r\n\r\n render () {\r\n return
    \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n const online = appIsOnlineSelector(state)\r\n const mapState = mapStateSelector(state)\r\n const hiddenLayerIds = hiddenLayerIdsSelector(state)\r\n return {\r\n online,\r\n ...mapState,\r\n hiddenLayerIds,\r\n token: getUserToken(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetLatLong : MapActions.setLatLong,\r\n MapLoading : MapActions.mapLoading,\r\n MapDoneLoading : MapActions.mapDoneLoading,\r\n HideLayer : MapActions.hideLayer,\r\n ShowLayer : MapActions.showLayer,\r\n ToggleDownloadMapData : MapActions.toggleDownloadMapData,\r\n GraphicsOverlapFeatures : MapActions.graphicsOverlapFeatures,\r\n ActiveMapId : MapActions.activeMapId,\r\n MapDragEnd : MapActions.mapDragEnd,\r\n ShowLoading : AppActions.showLoading,\r\n HideLoading : AppActions.hideLoading,\r\n}\r\nexport { ESRIMap, }\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ESRIMap)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Formik, Field, ErrorMessage, } from 'formik'\r\nimport {\r\n FormFeedback,\r\n FormGroup,\r\n Card,\r\n CardBody,\r\n Col,\r\n Label,\r\n Row,\r\n CardHeader,\r\n CardText,\r\n Alert,\r\n Badge,\r\n Button,\r\n} from 'reactstrap'\r\nimport { isEqual, isEmpty, } from 'lodash'\r\nimport { string, number, func, array, object, PropTypes, bool, } from 'prop-types'\r\n\r\n// Components\r\nimport { AddressForm, GeoCoordinateForm, PLSSForm, } from '../Forms'\r\nimport ESRIMap from '../ESRIMap'\r\nimport Effect from '../Effect'\r\nimport BurnPermitFormSection from './FormSection'\r\nimport AuditData from '../AuditData'\r\nimport LoadingBar from '../LoadingBar'\r\nimport {\r\n PopoverButton,\r\n RequiredLabel,\r\n Select,\r\n ValidatingField,\r\n YesNoRadioButtonGroup,\r\n} from '../FormControls'\r\n\r\n// Actions\r\nimport ApiActions from '../../redux/ApiRedux'\r\nimport BurnPermitLocationActions from '../../redux/BurnPermitLocationRedux'\r\nimport GeoCoordinateActions from '../../redux/GeoCoordinateRedux'\r\nimport MapActions from '../../redux/MapRedux'\r\n\r\n// Models\r\nimport BurnPermitLocation from '../../models/BurnPermitLocation'\r\n\r\n// Selectors\r\nimport {\r\n directionsForSelectSelector,\r\n permitLocationByIdSelector,\r\n addressTypeByNameSelector,\r\n countiesForSelectSelector,\r\n fireDistrictDepartmentsForSelectSelector,\r\n locationAddress,\r\n} from '../../selectors/selectors'\r\nimport { regionsForSelectSelector, } from '../../selectors/regionSelectors'\r\nimport { userCanEditUGA, } from '../../selectors/burnPermitPermissionSelectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\nimport retry from '../../utilities/retry'\r\nimport { getArrayValueFromText, } from '../../utilities'\r\nimport { formatAddress, formatLegalDesc, } from '../../utilities/columnHelpers'\r\n\r\n// Map Config\r\nimport { ALL_LAYERS, UGA, REGIONS, FIRE_DISTRICTS, COUNTIES, TRS, } from '../../config/map/featureLayers'\r\nimport { POLYGON_SYMBOL, } from '../../config/map/symbols'\r\nimport { geoLocationFormSelector, } from '../../selectors/geoSelectors'\r\n\r\nconst PHYSICAL_ADDRESS_TYPE = 'Physical'\r\nconst TARGET_FEATURE_LAYER_IDS = [ REGIONS.id, FIRE_DISTRICTS.id, COUNTIES.id, TRS.id, ]\r\n\r\n\r\nconst geoLocCardHeight = { minHeight: '17em', }\r\nconst mapCardHeight = { minHeight: '24em', }\r\n\r\nclass BurnPermitBurnLocationSection extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n this.validationSchema = BurnPermitLocation.getValidationSchema()\r\n this.validateSection = this.validateSection.bind(this)\r\n this.onIntersectingFeaturesChanged = this.onIntersectingFeaturesChanged.bind(this)\r\n this.onAddressFormBlur = this.onAddressFormBlur.bind(this)\r\n this.validateAt = this.validateAt.bind(this)\r\n }\r\n \r\n static propTypes = {\r\n sectionId : number.isRequired,\r\n UpdateAdditionalLocationInfo : func,\r\n GetBurnLocationInfo : func,\r\n ResetGeoCoordinate : func,\r\n DeleteBurnLocationAddress : func,\r\n CreateBurnLocationAddress : func,\r\n CheckIfGraphicsOverlapLayerFeatures : func,\r\n GeneralMessage : func,\r\n Failure : func,\r\n burnPermitLocationId : PropTypes.oneOfType([ number, string, ]),\r\n permitLocation : object,\r\n GeoCoordinateState : object,\r\n IsGeocoding : bool,\r\n BurnPermitId : PropTypes.oneOfType([ number, string, ]),\r\n Map : object,\r\n address : object,\r\n addressType : object,\r\n Directions : array,\r\n Regions : array,\r\n Counties : array,\r\n FireDistrictDepartments : array,\r\n readOnly : bool,\r\n online : bool,\r\n isInUGA : bool,\r\n canEditUga : bool,\r\n isActive : bool,\r\n geocodedLocation : array,\r\n Geocode : func,\r\n ResetGeocoded : func,\r\n }\r\n\r\n state = {\r\n legalDescError: '',\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.isActive) {\r\n this.props.CheckIfGraphicsOverlapLayerFeatures()\r\n }\r\n const {\r\n burnPermitLocationId,\r\n GetBurnLocationInfo,\r\n online,\r\n } = this.props\r\n\r\n if (this.props.isActive && online) {\r\n GetBurnLocationInfo(burnPermitLocationId)\r\n }\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.ResetGeoCoordinate()\r\n this.props.CheckIfGraphicsOverlapLayerFeatures()\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n // Don't fire off anything unless we're active\r\n if (!this.props.isActive) {\r\n return\r\n }\r\n\r\n if (prevProps.isActive !== true && this.props.isActive === true) {\r\n this.props.CheckIfGraphicsOverlapLayerFeatures()\r\n this.props.GetBurnLocationInfo(this.props.burnPermitLocationId)\r\n }\r\n \r\n const { canEditUga, } = this.props\r\n\r\n const { TRSResult, } = this.props.GeoCoordinateState\r\n if (TRSResult) {\r\n if (TRSResult.features.length === 0 && !this.state.legalDescError) {\r\n this.setState({ legalDescError: 'Could not geocode the provided legal description.', })\r\n }\r\n else if (TRSResult.features.length && this.state.legalDescError) {\r\n this.setState({ legalDescError: '', })\r\n }\r\n }\r\n\r\n const { graphicsOverlap, } = this.props.Map\r\n\r\n if (!prevProps.Map.graphicsOverlap && graphicsOverlap && canEditUga) {\r\n if (this.formik) {\r\n this.formik.setFieldValue('IsUGA', 'yes')\r\n }\r\n else {\r\n console.error('Could not set the UGA radio control as formik was not available')\r\n }\r\n }\r\n else if (isEqual(prevProps.Map.graphicsOverlap, graphicsOverlap) && !graphicsOverlap && canEditUga) {\r\n if (this.formik && this.formik.values.IsUGA === 'yes') {\r\n this.formik.setFieldValue('IsUGA', 'no')\r\n }\r\n }\r\n\r\n if (prevProps.geocodedLocation !== this.props.geocodedLocation) {\r\n this.onIntersectingFeaturesChanged(this.props.geocodedLocation, true)\r\n }\r\n\r\n if (!prevProps.address && this.props.address || prevProps.address !== this.props.address) {\r\n this.onAddressFormBlur()\r\n }\r\n }\r\n\r\n validateAt (prop, values, errorCallback) {\r\n this.validationSchema\r\n .validateAt(prop, values, { abortEarly: true, } )\r\n .catch(errorCallback)\r\n }\r\n \r\n async onIntersectingFeaturesChanged (intersecting, resetGeocodeResult = false) {\r\n // no data, just return\r\n if (!intersecting || intersecting.length < 1) {\r\n return\r\n }\r\n else if(!this.formik) {\r\n console.error('Could not auto-populate form inputs as formik was not available')\r\n return\r\n }\r\n\r\n // Include \"ADDRESS\" to handle lookup service result \r\n const layersToHandle = [ ...TARGET_FEATURE_LAYER_IDS, 'ADDRESS', ]\r\n // Filter out any extra layers (when handling map result)\r\n let features = intersecting.filter(f => layersToHandle.includes(f.layerId))\r\n\r\n // Counties, regions, and fire depts. are all part of the burn location form\r\n // just set the value with formik\r\n const { Counties, Regions, FireDistrictDepartments, } = this.props\r\n\r\n // get the status of the coordinate and plss forms\r\n const { hasValues: gcHasValues, valid: gcIsValid, } = await this.getFormStatus(this.GeoCoordinateForm)\r\n const { hasValues: trsHasValues, valid: trsIsValid, } = await this.getFormStatus(this.PLSSForm)\r\n\r\n\r\n for (let f = 0, len = features.length; f < len; f++) {\r\n const feature = features[f] \r\n let checkBeforeSetting = false\r\n if (feature.source === 'ADDRESS' && gcHasValues && gcIsValid && trsHasValues && trsIsValid) {\r\n checkBeforeSetting = true\r\n }\r\n\r\n switch (feature.layerId) {\r\n case COUNTIES.id: {\r\n const setCountyField = () => {\r\n const county = getArrayValueFromText(Counties, feature.attributes.COUNTY_NM)\r\n if (county) { this.formik.setFieldValue('CountyId', county) }\r\n }\r\n if (checkBeforeSetting) {\r\n this.validateAt('CountyId', this.formik.values, setCountyField)\r\n break\r\n }\r\n setCountyField()\r\n break\r\n }\r\n case FIRE_DISTRICTS.id: {\r\n const setFireDistField = () => {\r\n const fire = getArrayValueFromText(FireDistrictDepartments, feature.attributes.FPD_DESC)\r\n if (fire) { this.formik.setFieldValue('FireDistrictDepartmentId', fire) }\r\n }\r\n if (checkBeforeSetting) {\r\n this.validateAt('FireDistrictDepartmentId', this.formik.values, setFireDistField)\r\n break\r\n }\r\n setFireDistField()\r\n break\r\n }\r\n case REGIONS.id: {\r\n const setRegionField = () => {\r\n const region = getArrayValueFromText(Regions, feature.attributes.JURISDICT_LABEL_NM)\r\n if (region) { this.formik.setFieldValue('RegionId', region) }\r\n }\r\n if (checkBeforeSetting) {\r\n this.validateAt('RegionId', this.formik.values, setRegionField)\r\n break\r\n }\r\n setRegionField()\r\n break\r\n }\r\n case TRS.id: {\r\n if (checkBeforeSetting) {\r\n // this came from an address geocode request and we already have a valid TRS so just exit\r\n break\r\n } \r\n // call the plss form method to set everything\r\n this.PLSSForm.setTRSWithFeature(feature)\r\n break\r\n }\r\n case 'ADDRESS': {\r\n const addressLocation = JSON.stringify({\r\n type : 'point',\r\n coordinates : [ feature.location.x, feature.location.y, ],\r\n })\r\n this.AddressForm.formik.setFieldValue('AddressLocation', addressLocation)\r\n break\r\n }\r\n default: \r\n break\r\n }\r\n }\r\n // should only clear the geocode result if this method \r\n // was called in response to new results (instead of from map layers)\r\n if (resetGeocodeResult) {\r\n this.props.ResetGeocoded()\r\n }\r\n }\r\n\r\n /**\r\n * Get status information about a child form\r\n * @param {React.Component} form the form component to check\r\n * @returns form status information object\r\n */\r\n getFormStatus = async (form) => {\r\n const hasValues = form.hasValues()\r\n const touched = Object.values(form.formik.touched).some(v => v === true)\r\n let errors = {}\r\n if (touched && hasValues) {\r\n errors = await form.formik.validateForm({\r\n ...form.formik.values,\r\n Force: true,\r\n })\r\n }\r\n const valid = Object.keys(errors).length === 0 && form.formik.isValid\r\n const formStatusObj = { hasValues, touched, errors, valid, }\r\n return formStatusObj\r\n }\r\n\r\n async validateSection ({ evt, submit = true, }) {\r\n stopEvent(evt)\r\n if (!this.formik || !this.PLSSForm || !this.GeoCoordinateForm || !this.AddressForm) {\r\n const isValid = await retry(this.validateSection, { evt, submit, }, 100)\r\n return isValid\r\n }\r\n\r\n const { readOnly, canEditUga, } = this.props\r\n \r\n if (readOnly && !canEditUga) {\r\n return false\r\n }\r\n\r\n // Get the sub-form states\r\n // (address, geocoordinate, plss/trs)\r\n const addressForm = this.AddressForm\r\n const {\r\n touched: addressTouched,\r\n // errors: addressErrors,\r\n hasValues: addressHasValues,\r\n valid: addressValid,\r\n } = await this.getFormStatus(this.AddressForm)\r\n\r\n // TRS is always required. Either address or geocoordinate is also required\r\n const plssForm = this.PLSSForm\r\n const {\r\n // touched: plssTouched,\r\n // errors: plssErrors,\r\n // hasValues: plssHasValues,\r\n valid: plssValid,\r\n } = await this.getFormStatus(this.PLSSForm)\r\n\r\n const geocoordForm = this.GeoCoordinateForm\r\n const {\r\n touched: geocoordTouched,\r\n // errors: geocoordErrors,\r\n hasValues: geocoordHasValues,\r\n valid: geocoordValid,\r\n } = await this.getFormStatus(this.GeoCoordinateForm)\r\n\r\n if (!readOnly && submit) {\r\n // either the geocoordinate needs to be valid or the address needs to be valid\r\n if (!(geocoordHasValues && geocoordValid) && !(addressHasValues && addressValid)){\r\n this.props.Failure('You must complete either the Burn Address or Geolocation form.')\r\n return false\r\n }\r\n }\r\n\r\n // Check if there are errors with the Additional Location info\r\n const additionalLocationInfoErrors = await this.formik.validateForm()\r\n const AdditionalInfoValid = Object.keys(additionalLocationInfoErrors).length === 0\r\n // If there are\r\n if (!AdditionalInfoValid) {\r\n // Attempt the submit to reveal the inline validation messages\r\n this.submitForm()\r\n }\r\n\r\n const coordHasValidValues = geocoordHasValues && geocoordValid\r\n const addressHasValidValues = addressHasValues && addressValid\r\n\r\n // if either the address form or the geocoordinate form has values and is valid\r\n // and the other form is either empty or valid, consider the form valid.\r\n // also the plss and other location info must be valid\r\n const isValid = AdditionalInfoValid \r\n && plssValid \r\n && (\r\n (coordHasValidValues && (addressHasValidValues || !addressHasValues))\r\n || (addressHasValidValues && (coordHasValidValues || !geocoordHasValues))\r\n )\r\n\r\n if (isValid && submit && !readOnly) {\r\n plssForm.submitForm()\r\n if (geocoordTouched && coordHasValidValues) {\r\n geocoordForm.submitForm()\r\n }\r\n if (addressTouched && addressHasValidValues) {\r\n addressForm.submitForm()\r\n }\r\n this.submitForm()\r\n }\r\n return isValid\r\n }\r\n\r\n submitForm = () => {\r\n this.formik.submitForm()\r\n }\r\n\r\n submit = (values) => {\r\n \r\n const {\r\n FireDistrictDepartmentId,\r\n DrivingDirections,\r\n SlopePercent,\r\n ElevationFeet,\r\n RegionId,\r\n CountyId,\r\n IsUGA,\r\n } = values\r\n\r\n const { BurnPermitLocationId, } = this.props.permitLocation\r\n const additionalLocationInfo = {\r\n FireDistrictDepartmentId,\r\n DrivingDirections,\r\n SlopePercent,\r\n ElevationFeet,\r\n BurnPermitLocationId,\r\n RegionId,\r\n CountyId,\r\n IsUGA: IsUGA === 'yes',\r\n }\r\n \r\n const { GeocodeResult, } = this.props.GeoCoordinateState\r\n if (GeocodeResult && GeocodeResult.location) {\r\n additionalLocationInfo.AddressLocation = JSON.stringify({\r\n type : 'point',\r\n coordinates : [ GeocodeResult.location.x, GeocodeResult.location.y, ],\r\n })\r\n }\r\n\r\n this.props.UpdateAdditionalLocationInfo(additionalLocationInfo)\r\n }\r\n\r\n buildGeoLocGraphics = () => {\r\n\r\n const { GeocodeResult, TRSResult, } = this.props.GeoCoordinateState\r\n const { BurnPermitId, address, permitLocation, } = this.props\r\n const { LatLong, } = this.props.Map\r\n const graphics = []\r\n const graphicsForUGA = []\r\n\r\n // Add polygons first\r\n const plssFormAvailable = this.PLSSForm && this.PLSSForm.formik && this.PLSSForm.formik.values.LegalDescriptionLocation\r\n if (TRSResult || permitLocation.LegalDescriptionLocation || plssFormAvailable) {\r\n let features= []\r\n if (TRSResult && TRSResult.features.length) {\r\n features = TRSResult.features.map(f => {\r\n return {\r\n geometry : { rings: f.geometry.coordinates, type: f.geometry.type.toLowerCase(), },\r\n attributes : { ...f.properties, },\r\n }\r\n }, [])\r\n }\r\n else if (permitLocation.LegalDescriptionLocation) {\r\n const geometry = JSON.parse(permitLocation.LegalDescriptionLocation)\r\n features.push({\r\n geometry : { rings: geometry.coordinates, type: 'polygon', },\r\n attributes : {\r\n TRS_CD: formatLegalDesc(permitLocation),\r\n },\r\n })\r\n }\r\n else if (plssFormAvailable) {\r\n const geometry = JSON.parse(this.PLSSForm.formik.values.LegalDescriptionLocation)\r\n features.push({\r\n geometry : { rings: geometry.coordinates, type: 'polygon', },\r\n attributes : {\r\n TRS_CD: formatLegalDesc(this.PLSSForm.formik.values),\r\n },\r\n })\r\n }\r\n for (let f = 0, fLen = features.length; f < fLen; f++) {\r\n const convertedFeature = features[0]\r\n convertedFeature['popupTemplate'] = { \r\n title : 'Burn Permit Legal Description', \r\n content : [ { \r\n type : 'fields', \r\n fieldInfos : [\r\n { fieldName: 'TRS_CD', label: 'Legal Desc.', },\r\n ], \r\n }, ],\r\n }\r\n convertedFeature.symbol = POLYGON_SYMBOL\r\n graphics.push(convertedFeature)\r\n }\r\n }\r\n \r\n // Then points\r\n if (!isEmpty(LatLong) && LatLong.Latitude > 0 && LatLong.Longitude < 0) {\r\n const { Latitude, Longitude, } = LatLong\r\n const latLongPoint = {\r\n geometry: {\r\n type : 'point',\r\n latitude : Latitude,\r\n longitude : Longitude,\r\n },\r\n attributes: {\r\n BurnPermitID : BurnPermitId,\r\n Latitude : Latitude,\r\n Longitude : Longitude,\r\n },\r\n popupTemplate: {\r\n title : 'Burn Location Lat/Long',\r\n content : [ {\r\n type : 'fields',\r\n fieldInfos : [\r\n { fieldName: 'BurnPermitID', label: 'Burn Permit ID', visible: true, },\r\n { fieldName: 'Longitude', label: 'Longitude', visible: true, },\r\n { fieldName: 'Latitude', label: 'Latitude', visible: true, },\r\n ],\r\n }, ],\r\n },\r\n }\r\n graphicsForUGA.push(latLongPoint)\r\n graphics.push(latLongPoint)\r\n }\r\n\r\n // Only try to show the geocoordinate address result is there is one\r\n const addressFormHasLocation = this.AddressForm && this.AddressForm.formik && this.AddressForm.formik.values.AddressLocation\r\n\r\n if (GeocodeResult || (address && address.AddressLocation) || addressFormHasLocation) {\r\n let x, y, addressText\r\n if (GeocodeResult) {\r\n addressText = GeocodeResult.address\r\n x = GeocodeResult.location.x\r\n y = GeocodeResult.location.y\r\n }\r\n else if (address && address.AddressLocation) {\r\n addressText = formatAddress(address)\r\n const geoJson = JSON.parse(address.AddressLocation)\r\n x = geoJson.coordinates[0]\r\n y = geoJson.coordinates[1]\r\n }\r\n else if (addressFormHasLocation) {\r\n addressText = formatAddress(address)\r\n const geoJson = JSON.parse(this.AddressForm.formik.values.AddressLocation)\r\n x = geoJson.coordinates[0]\r\n y = geoJson.coordinates[1]\r\n }\r\n if (x && y) {\r\n const addressPoint = {\r\n geometry: {\r\n type : 'point',\r\n latitude : y,\r\n longitude : x,\r\n },\r\n attributes: {\r\n BurnPermitID : BurnPermitId,\r\n // Latitudes are +/- 0:90 and Longitudes are +/- 0:180\r\n // The precision arguments are intentionally different in \r\n // order to display the same number of decimal values\r\n Latitude : y.toPrecision(8),\r\n Longitude : x.toPrecision(9),\r\n Address : addressText,\r\n },\r\n popupTemplate: {\r\n title : 'Burn Location Address (Geocoded)',\r\n content : [ {\r\n type : 'fields',\r\n fieldInfos : [\r\n { fieldName: 'BurnPermitID', label: 'Burn Permit ID', visible: true, },\r\n { fieldName: 'Address', label: 'Address', visible: true, },\r\n { fieldName: 'Longitude', label: 'Longitude', visible: true, },\r\n { fieldName: 'Latitude', label: 'Latitude', visible: true, },\r\n ],\r\n }, ],\r\n },\r\n }\r\n // Only check if the Address is in the UGA if there is no Lat/Long point\r\n if (graphicsForUGA.length === 0) {\r\n graphicsForUGA.push(addressPoint)\r\n }\r\n graphics.push(addressPoint)\r\n }\r\n }\r\n\r\n // Only check if the graphics change to limit the actions dispatched and queries issued\r\n if (this.props.Map.MapActive && !isEqual(this.props.Map.overlapGraphics, graphicsForUGA)) {\r\n setTimeout(() => this.props.CheckIfGraphicsOverlapLayerFeatures(UGA.id, graphicsForUGA), 100)\r\n }\r\n\r\n return graphics\r\n }\r\n\r\n onFormChange = (changedData = []) => {\r\n const { canEditUga, GeneralMessage, } = this.props\r\n\r\n if (canEditUga && changedData.some(d => d[0] === 'IsUGA')) {\r\n GeneralMessage('UGA Change', 'Please outline in an Application Status comment why you changed this value.')\r\n }\r\n this.validateSection({ submit: false, }).then(isValid => {\r\n this.setState({ isValid, })\r\n })\r\n }\r\n\r\n deleteAddress = evt => {\r\n stopEvent(evt)\r\n const { addressid, } = evt.target.dataset\r\n this.props.DeleteBurnLocationAddress(this.props.burnPermitLocationId, addressid)\r\n }\r\n\r\n createAddress = address => {\r\n this.props.CreateBurnLocationAddress(this.props.burnPermitLocationId, address)\r\n }\r\n\r\n setMapLatLong = async (data) => {\r\n if (this.mapRef && this.mapRef.setLatLong) {\r\n await this.mapRef.setLatLong(data)\r\n }\r\n }\r\n\r\n \r\n\r\n async onAddressFormBlur (evt) {\r\n // if this blur is for an element contained in the form, ignore it\r\n if (evt) {\r\n const { currentTarget, relatedTarget, } = evt\r\n if (currentTarget && relatedTarget && currentTarget.contains(relatedTarget)) {return}\r\n }\r\n \r\n // if the form isn't ready or hasn't changed just exit\r\n if (!this.AddressForm || !this.AddressForm.formik || !this.AddressForm.formik.touched || !this.props.online) {\r\n return\r\n }\r\n\r\n // only geocode if the form is valid, run validate with Force = true\r\n // to make sure everything is checked\r\n this.AddressForm.formik.validateForm({\r\n ...this.AddressForm.formik.values,\r\n Force: true,\r\n }).then((errors) => {\r\n if (!isEmpty(errors)) { return }\r\n const {\r\n StreetLine1,\r\n AddressCity,\r\n AddressState,\r\n AddressZipCode,\r\n } = this.AddressForm.formik.values\r\n if (AddressZipCode.toString().length === 5) {\r\n this.props.Geocode(StreetLine1, AddressCity, AddressState, AddressZipCode)\r\n }\r\n })\r\n .catch(err => console.error('formik validate error', err))\r\n }\r\n\r\n\r\n setFormikRef = node => this.formik = node\r\n\r\n setAddressFormRef = node => this.AddressForm = node\r\n\r\n setGeoCoordFormRef = node => this.GeoCoordinateForm = node\r\n\r\n setPLSSFormRef = node => this.PLSSForm = node\r\n\r\n setMapRef = node => this.mapRef = node\r\n\r\n render () {\r\n const { permitLocation, address, addressType, readOnly, isInUGA, canEditUga, } = this.props\r\n \r\n // Force Physical Address Type\r\n if (address && addressType) {\r\n address.AddressTypeId = addressType.AddressTypeId\r\n }\r\n\r\n let children = ''\r\n\r\n if (!permitLocation) {\r\n children = \r\n \r\n \r\n Loading Burn Location Data...\r\n \r\n \r\n \r\n }\r\n else {\r\n const burnLocationMapData = [\r\n {\r\n layerId : this.props.burnPermitLocationId,\r\n layerTitle : 'Burn Permit Locations',\r\n data : this.buildGeoLocGraphics(),\r\n },\r\n ]\r\n const initialValues = {\r\n FireDistrictDepartmentId : permitLocation.FireDistrictDepartmentId,\r\n DrivingDirections : permitLocation.DrivingDirections,\r\n SlopePercent : permitLocation.SlopePercent,\r\n ElevationFeet : permitLocation.ElevationFeet,\r\n CountyId : permitLocation.CountyId,\r\n RegionId : permitLocation.RegionId,\r\n IsUGA : permitLocation.IsUGA, \r\n CreateBy : permitLocation.CreateBy,\r\n CreateDate : permitLocation.CreateDate,\r\n UpdateBy : permitLocation.UpdateBy,\r\n UpdateDate : permitLocation.UpdateDate,\r\n }\r\n children =\r\n <>\r\n \r\n \r\n \r\n Geolocation\r\n \r\n

    Enter values in decimal degrees format.

    \r\n

    \r\n Latitude/longitude is required when there is not\r\n a street address for the burn location. If the burn area is large, the latitude/longitude should be\r\n provided for the approximate center of the burn area.\r\n

    \r\n

    \r\n There are several acceptable ways to obtain the latitude and longitude including:\r\n

    \r\n
      \r\n
    • Google Maps (See Appendix A for directions on using Google Maps to determine latitude and\r\n longitude)
    • \r\n
    • Google Earth
    • \r\n
    • GPS unit (NAD 83 datum)
    • \r\n
    \r\n \r\n }\r\n />\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n Legal Description\r\n \r\n \r\n \r\n \r\n \r\n { this.state.legalDescError && <>\r\n \r\n {this.state.legalDescError}\r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n

    Map

    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n Burn Address\r\n \r\n \r\n This must be a valid street address in Washington \r\n where the forest material is being removed and burned. \r\n It is not your home or mailing address.\r\n }\r\n actionButton={!readOnly && permitLocation.AddressId > 0\r\n ? \r\n Delete\r\n \r\n : null\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Additional Location Information\r\n \r\n \r\n {({ values, errors, }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n Elevation of Burn Unit\r\n \r\n \r\n \r\n \r\n \r\n Slope (average percent slope of unit)\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Local Fire Department or Fire District Name\r\n Please choose your fire district from the list. If in an unprotected area, choose Unprotected. If you do not know, choose Unknown.}\r\n />\r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, }) => (\r\n <>\r\n \r\n {\r\n (field.value && (field.value === 'yes' || field.value.toString() === 'true')) && \r\n The location of your planned burn is within or near a UGA.\r\n You will be required to submit Burn Requests for all burns, regardless of tonnage.\r\n \r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Provide driving directions to the burn location from the nearest primary road, highway, or state route (895 characters)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n }\r\n return In a UGA : null}\r\n >\r\n { children }\r\n \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n \r\n const permitLocation = permitLocationByIdSelector(state, props.burnPermitLocationId)\r\n \r\n let address = permitLocation ? permitLocation.Address : null\r\n if (!address && permitLocation) {\r\n address = locationAddress(state, permitLocation.BurnPermitLocationId)\r\n }\r\n\r\n const userCanEditUga = userCanEditUGA(state)\r\n // DNR Users can edit the UGA value if the application is not Denied, Issued or Revoked.\r\n const canEditUga = userCanEditUga && (\r\n props.applicationStatus !== 'Denied' &&\r\n props.applicationStatus !== 'Issued' &&\r\n props.applicationStatus !== 'Revoked'\r\n )\r\n const { online, } = state.offline\r\n\r\n const { applications, activeBurnPermitId, } = state.BurnPermitForm\r\n const isActive = applications[activeBurnPermitId].activeStep === props.sectionId\r\n return {\r\n online,\r\n permitLocation,\r\n address,\r\n canEditUga,\r\n isActive,\r\n Map : state.Map,\r\n GeoCoordinateState : state.GeoCoordinate,\r\n IsGeocoding : state.GeoCoordinate.IsGeocoding,\r\n IsGeocodingLocation : state.GeoCoordinate.IsGeocodingLocation,\r\n geocodedLocation : geoLocationFormSelector(state),\r\n BurnPermitId : state.BurnPermitForm.activeBurnPermitId,\r\n addressType : addressTypeByNameSelector(state, PHYSICAL_ADDRESS_TYPE),\r\n Regions : regionsForSelectSelector(state),\r\n Counties : countiesForSelectSelector(state),\r\n FireDistrictDepartments : fireDistrictDepartmentsForSelectSelector(state),\r\n Directions : directionsForSelectSelector(state, (d => [ 'E', 'W', ].includes(d.DirectionAbbreviation))),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n UpdateAdditionalLocationInfo : BurnPermitLocationActions.updateBurnPermitLocationAdditionalInfo,\r\n GetBurnLocationInfo : BurnPermitLocationActions.getBurnLocationInfo,\r\n DeleteBurnLocationAddress : BurnPermitLocationActions.deleteBurnLocationAddress,\r\n CreateBurnLocationAddress : BurnPermitLocationActions.createBurnLocationAddress,\r\n ResetGeoCoordinate : GeoCoordinateActions.resetGeoCoordinate,\r\n Geocode : GeoCoordinateActions.geocode,\r\n ResetGeocoded : GeoCoordinateActions.resetGeolocatedLocation,\r\n CheckIfGraphicsOverlapLayerFeatures : MapActions.checkIfGraphicsOverlapLayerFeatures,\r\n GeneralMessage : ApiActions.generalMessage,\r\n Failure : ApiActions.failure,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitBurnLocationSection) ","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Formik, Field, } from 'formik'\r\nimport { isEmpty, } from 'lodash'\r\nimport { FormFeedback, Row, Col, Input, Label, Card, CardBody, } from 'reactstrap'\r\nimport { bool, string, number, func, array, object, PropTypes, } from 'prop-types'\r\n\r\n// Reducers\r\nimport BurnPermitFuelsActions from '../../redux/BurnPermitFuelsRedux'\r\n\r\n// Components\r\nimport BurnPermitFormSection from './FormSection'\r\nimport Effect from '../Effect'\r\nimport AuditData from '../AuditData'\r\nimport {\r\n RequiredLabel,\r\n ValidatingField,\r\n CheckBoxes,\r\n FuelDiameters,\r\n Select,\r\n} from '../FormControls'\r\n\r\n// Selectors\r\nimport { \r\n burnIgnitionTypesCheckboxSelector,\r\n duffTypeSelectSelector,\r\n fuelsInfoByIdSelector,\r\n networkStateSelector,\r\n} from '../../selectors/selectors'\r\n\r\n// Utilities\r\nimport retry from '../../utilities/retry'\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n// Models\r\nimport BurnPermitFuel from '../../models/BurnPermitFuel'\r\nimport { activeBurnPermitStateSelector, } from '../../selectors/burnPermitSelectors'\r\n\r\n\r\nclass BurnFuelsSection extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n\r\n this.validationSchema = BurnPermitFuel.validationSchema()\r\n this.onFormChange = this.onFormChange.bind(this)\r\n this.validateSection = this.validateSection.bind(this)\r\n }\r\n\r\n static propTypes = {\r\n online : bool,\r\n // This prop is passed to the component\r\n title : string.isRequired,\r\n sectionId : number.isRequired,\r\n DuffTypes : array,\r\n FuelDiams : array,\r\n FuelsInfo : object,\r\n api : object,\r\n burnPermitFuelId : number,\r\n BurnIgnitionTypes : array,\r\n validationSchema : object,\r\n UpdateBurnPermitFuels : func,\r\n GetBurnPermitFuelsInfo : func,\r\n readOnly : bool,\r\n TotalPermitTonnage : PropTypes.oneOfType([ number, string, ]),\r\n EstimatedFee : PropTypes.oneOfType([ number, string, ]),\r\n isActive : bool,\r\n }\r\n\r\n static defaultProps = {\r\n readOnly: false,\r\n }\r\n\r\n state = {\r\n otherDescError : '',\r\n isValid : '',\r\n }\r\n\r\n calcInputLabels = 'pl-0 pl-md-4 mt-2'\r\n calcInputRows = 'my-2'\r\n\r\n componentDidMount () {\r\n const { GetBurnPermitFuelsInfo, online, burnPermitFuelId, isActive, } = this.props\r\n if (online && isActive) {\r\n GetBurnPermitFuelsInfo(burnPermitFuelId)\r\n }\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n if (prevProps.isActive !== true && this.props.isActive === true) {\r\n this.props.GetBurnPermitFuelsInfo(this.props.burnPermitFuelId)\r\n }\r\n }\r\n\r\n async validateSection ({ evt, submit = true, }) {\r\n if (!this.formik) {\r\n return await retry(this.validateSection, { submit, }, 100)\r\n }\r\n stopEvent(evt)\r\n let isValid = false\r\n if (this.formik) {\r\n isValid = await this.formIsValid()\r\n if (isValid && submit) {\r\n await this.formik.submitForm()\r\n }\r\n }\r\n return isValid\r\n }\r\n\r\n formIsValid = async () => {\r\n const errs = await this.formik.validateForm()\r\n const otherDescError = this.checkIfOtherDescriptionIsRequired()\r\n const inputsWithError = Object.keys(errs)\r\n const isValid = (!errs || inputsWithError.length === 0) && !otherDescError\r\n if (inputsWithError.length > 0) {\r\n for (let i = 0, len = inputsWithError.length; i < len; i++) {\r\n if (!this.formik.touched[inputsWithError[i]]) {\r\n this.formik.setFieldTouched(inputsWithError[i])\r\n }\r\n }\r\n }\r\n return isValid\r\n }\r\n\r\n checkIfOtherDescriptionIsRequired = () => {\r\n const { BurnIgnitionTypes, } = this.props\r\n const { values: formValues, } = this.formik\r\n const otherIgnType = BurnIgnitionTypes.some(b => b.Text === 'Other' && formValues.BurnIgnitionTypes.includes(b.Value))\r\n // If 'Other' Ignition Type is chosen\r\n // Make sure a description is entered\r\n let otherDescError = ''\r\n if (otherIgnType && !formValues.OtherBurnIgnitionTypeDescription) {\r\n otherDescError = 'You must enter a description for the \\'Other\\' Ignition Type or uncheck \\'Other\\''\r\n }\r\n if (otherDescError !== this.state.otherDescError) {\r\n this.setState({ otherDescError, })\r\n }\r\n return !!otherDescError\r\n }\r\n\r\n submit = values => {\r\n this.props.UpdateBurnPermitFuels(values)\r\n }\r\n\r\n /**\r\n * Sums the values of all fuel diameter inputs set, the Shrub tonnage per acre, and Grass tonnage per acre\r\n */\r\n calculateTonnage = () => {\r\n if (!this.formik) {\r\n return\r\n }\r\n let tonsPerAcre = 0.0\r\n const { Shrubs, GrassHerb, BurnPermitFuelLoadingXref, } = this.formik.values\r\n let fuelsTotal = BurnPermitFuelLoadingXref\r\n .map(f => f.TonsPerAcre)\r\n .reduce((a, b) => {\r\n return a + b\r\n }, tonsPerAcre)\r\n tonsPerAcre = fuelsTotal + (Shrubs || 0.0) + (GrassHerb || 0.0)\r\n this.formik.setFieldValue('TotalTonsPerAcre', tonsPerAcre.toFixed(1))\r\n }\r\n\r\n /**\r\n * When a value is entered, changed, or removed from any Fuel Diameter input\r\n * this will update the state property array to include the configured values\r\n */\r\n onFuelDiamChange = e => {\r\n \r\n const thisFuelDiamId = parseInt(e.target.dataset.id)\r\n const { BurnPermitFuelLoadingXref, } = this.formik.values\r\n const fuelDiams = [ ...BurnPermitFuelLoadingXref, ]\r\n\r\n // If it's already in the array\r\n const fuelDiamIndex = fuelDiams.map(f => f.FuelDiameterId).indexOf(thisFuelDiamId)\r\n if (fuelDiamIndex > -1) {\r\n // Remove it\r\n fuelDiams.splice(fuelDiamIndex, 1,)\r\n }\r\n\r\n // If there's a value to calculate, add it the array\r\n if (e.target.value) {\r\n fuelDiams.push({\r\n TonsPerAcre : parseFloat(e.target.value),\r\n BurnPermitFuelId : this.props.burnPermitFuelId,\r\n FuelDiameterId : thisFuelDiamId,\r\n })\r\n }\r\n this.formik.setFieldValue('BurnPermitFuelLoadingXref', fuelDiams)\r\n }\r\n\r\n onFormChange (changedEntries) {\r\n if (changedEntries.every(e => e[0] === 'TotalTonsPerAcre')) {\r\n return\r\n }\r\n \r\n this.validateSection({ submit: false, }).then(isValid => {\r\n this.setState({ isValid, }, () => this.calculateTonnage())\r\n })\r\n }\r\n\r\n setFormikNode = node => this.formik = node\r\n\r\n render () {\r\n const {\r\n readOnly,\r\n FuelsInfo,\r\n BurnIgnitionTypes,\r\n } = this.props\r\n\r\n let form = null\r\n if (!isEmpty(FuelsInfo)) {\r\n form = \r\n {({ values, errors, }) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n { \r\n values.ShowFuelsCalculator && <>\r\n \r\n \r\n

    Broadcast/Natural estimated gross fuel loading

    \r\n

    Enter values to the nearest tenth.

    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n Diameter of Fuel (inches)\r\n \r\n \r\n Tons/Acre (0.1 or greater)\r\n \r\n \r\n { \r\n Array.isArray(errors.BurnPermitFuelLoadingXref)\r\n ? errors.BurnPermitFuelLoadingXref\r\n .filter(e => !!e)\r\n .map(e => {\r\n const err = Object.values(e).join('\\n\\n')\r\n return <>\r\n \r\n {err}\r\n \r\n })\r\n : errors.BurnPermitFuelLoadingXref\r\n ? <>\r\n \r\n {errors.BurnPermitFuelLoadingXref}\r\n \r\n : null\r\n }\r\n \r\n \r\n \r\n  \r\n  \r\n \r\n \r\n Shrubs (tons/acre)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Grass/Herb (tons/acre)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Duff Type\r\n \r\n \r\n \r\n {({ field, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Duff depth (inches)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Litter depth (inches)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Total tons per Acre\r\n
    \r\n (auto-calculated sum of tonnages including > 3 inch rotten fuel, shrub, grass/herb)\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n Broadcast and Natural Prescribed Burning May Require a Burn Plan for Permit Issuance\r\n \r\n \r\n }\r\n
    \r\n
    \r\n \r\n )}\r\n \r\n }\r\n \r\n return \r\n { form }\r\n
    \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { online, } = networkStateSelector(state)\r\n const { activeStep, } = activeBurnPermitStateSelector(state)\r\n return {\r\n online,\r\n isActive : activeStep === props.sectionId,\r\n BurnIgnitionTypes : burnIgnitionTypesCheckboxSelector(state),\r\n DuffTypes : duffTypeSelectSelector(state),\r\n FuelsInfo : fuelsInfoByIdSelector(state, props.burnPermitFuelId),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n GetBurnPermitFuelsInfo : BurnPermitFuelsActions.getBurnPermitFuelsInfo,\r\n UpdateBurnPermitFuels : BurnPermitFuelsActions.updateBurnPermitFuels,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnFuelsSection)","// Libraries\r\nimport React, { useCallback, } from 'react'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { Button, } from 'reactstrap'\r\nimport { string, bool, number, PropTypes, } from 'prop-types'\r\n\r\n// Components\r\nimport ConfirmationModal from '../../../../ConfirmationModal'\r\n\r\n// Reducers\r\nimport UiActions from '../../../../../redux/UiRedux'\r\nimport BurnPermitPileGroupActions from '../../../../../redux/BurnPermitPileGroupRedux'\r\n\r\n\r\nconst MODAL_KEY = 'DELETE_PILE_GROUP'\r\n\r\nconst DeletePile = props => {\r\n const {\r\n disabled,\r\n pileGroupName,\r\n pileGroupId,\r\n hideButton,\r\n } = props\r\n\r\n const dispatch = useDispatch()\r\n\r\n const openModal = useCallback(() => dispatch(UiActions.openModal(MODAL_KEY)), [ dispatch, ])\r\n\r\n const submit = useCallback(() => {\r\n dispatch(BurnPermitPileGroupActions.deletePileGroup(pileGroupId))\r\n }, [ dispatch, pileGroupId, ])\r\n\r\n let btn = \r\n Delete\r\n \r\n if (hideButton) {\r\n btn = null\r\n }\r\n\r\n return <>\r\n {btn}\r\n Are you sure you want to delete Pile Group {pileGroupName}?

    }\r\n submitAction={submit}\r\n submitArgs={[ pileGroupId, ]}\r\n />\r\n \r\n}\r\n\r\nDeletePile.propTypes = {\r\n pileGroupName : string,\r\n pileGroupId : PropTypes.oneOfType([ number, string, ]),\r\n disabled : bool,\r\n hideButton : bool,\r\n}\r\n\r\nexport default React.memo(DeletePile)","// Libraries\r\nimport React, { useCallback, } from 'react'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { Button, } from 'reactstrap'\r\nimport { string, bool, number, PropTypes, } from 'prop-types'\r\n\r\n// Components\r\nimport ConfirmationModal from '../../../../ConfirmationModal'\r\n\r\n// Reducers\r\nimport UiActions from '../../../../../redux/UiRedux'\r\nimport BurnPermitPileGroupActions from '../../../../../redux/BurnPermitPileGroupRedux'\r\n\r\n\r\nconst MODAL_KEY = 'DELETE_ALL_PILE_GROUPS'\r\n\r\nconst DeleteAllPiles = props => {\r\n const {\r\n disabled,\r\n permitId,\r\n className,\r\n } = props\r\n\r\n const dispatch = useDispatch()\r\n\r\n const openModal = useCallback(() => dispatch(UiActions.openModal(MODAL_KEY)), [ dispatch, ])\r\n\r\n const submit = useCallback((permitId) => {\r\n dispatch(BurnPermitPileGroupActions.deleteAllPileGroups(permitId))\r\n }, [ dispatch, ])\r\n\r\n return
    \r\n \r\n Delete All Piles\r\n \r\n Are you sure you want to delete ALL Pile Groups for Permit ID {permitId}?

    }\r\n submitAction={submit}\r\n submitArgs={[ permitId, ]}\r\n />\r\n
    \r\n}\r\n\r\nDeleteAllPiles.propTypes = {\r\n className : string,\r\n permitId : PropTypes.oneOfType([ number, string, ]),\r\n disabled : bool,\r\n}\r\n\r\nexport default React.memo(DeleteAllPiles)","// Libraries\r\nimport React, { useCallback, } from 'react'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { Button, } from 'reactstrap'\r\nimport { bool, } from 'prop-types'\r\n\r\n// Reducers\r\nimport BurnPermitPileGroupActions from '../../../../../redux/BurnPermitPileGroupRedux'\r\n\r\n\r\nconst CancelEditPile = props => {\r\n const {\r\n IsLocal,\r\n disabled,\r\n } = props\r\n\r\n const dispatch = useDispatch()\r\n\r\n const cancel = useCallback(() => {\r\n if (IsLocal) {\r\n dispatch(BurnPermitPileGroupActions.deletePileGroup())\r\n }\r\n else {\r\n dispatch(BurnPermitPileGroupActions.editBurnPermitPileGroup())\r\n }\r\n }, [ dispatch, IsLocal, ])\r\n\r\n return \r\n Cancel\r\n \r\n}\r\n\r\nCancelEditPile.propTypes = {\r\n disabled : bool,\r\n IsLocal : bool,\r\n}\r\n\r\nexport default React.memo(CancelEditPile)","import React, { useMemo, } from 'react'\r\n\r\nfunction DownloadCSV () {\r\n const style = useMemo(() => ({ 'fontSize': '1.5em', color: 'green', }), [])\r\n return \r\n}\r\n\r\nexport default DownloadCSV","// Libraries\r\nimport React, { useCallback, } from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Button, Modal, ModalBody, ModalHeader, } from 'reactstrap'\r\nimport { string, bool, number, PropTypes, } from 'prop-types'\r\n\r\n// Components\r\nimport Upload from '../../../../Upload'\r\n\r\n// Reducers\r\nimport UiActions from '../../../../../redux/UiRedux'\r\nimport BurnPermitPileGroupActions from '../../../../../redux/BurnPermitPileGroupRedux'\r\nimport { isModalOpen, } from '../../../../../selectors/uiSelectors'\r\nimport DownloadCSV from '../../../../Icons/DownloadCSV'\r\n\r\nconst MODAL_KEY = 'BATCH_PILE_UPLOAD'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_BATCH_UPLOAD_TEMPLATE, } = process.env\r\n\r\nconst BatchUpload = props => {\r\n const {\r\n className,\r\n disabled,\r\n permitId,\r\n } = props\r\n\r\n const dispatch = useDispatch()\r\n\r\n const openModal = React.useCallback(() => dispatch(UiActions.openModal(MODAL_KEY)), [ dispatch, ])\r\n const closeModal = React.useCallback(() => dispatch(UiActions.closeModal()), [ dispatch, ])\r\n const modalOpen = useSelector(state => isModalOpen(state, MODAL_KEY))\r\n const toggleModal = useCallback(() => {\r\n if (modalOpen) {\r\n closeModal()\r\n }\r\n else {\r\n openModal()\r\n }\r\n }, [ openModal, closeModal, modalOpen, ])\r\n\r\n const upload = useCallback((files) => {\r\n dispatch(BurnPermitPileGroupActions.uploadBatchPiles(permitId, files))\r\n }, [ dispatch, permitId, ])\r\n\r\n return
    \r\n \r\n Batch Upload\r\n \r\n \r\n \r\n Batch Upload Pile Groups\r\n \r\n \r\n

    Use the upload control below to drag and drop a .csv into or click the area to open a File Explorer to locate your Pile Groups you want to include as part of this application.

    \r\n

    A template can be found here \r\n pile_calc_batch_template.csv \r\n . Remove the `HandEx` and `MachineEx` examples when populating the template.

    \r\n \r\n
    \r\n
    \r\n
    \r\n}\r\n\r\nBatchUpload.propTypes = {\r\n className : string,\r\n disabled : bool,\r\n permitId : PropTypes.oneOfType([ number, string, ]),\r\n}\r\n\r\nexport default React.memo(BatchUpload)","// Libraries\r\nimport React, { useCallback, } from 'react'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { Button, } from 'reactstrap'\r\n\r\n// Reducers\r\nimport BurnPermitPileGroupActions from '../../../../../redux/BurnPermitPileGroupRedux'\r\n\r\n\r\nconst AddPile = () => {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const addPile = useCallback(() => {\r\n dispatch(BurnPermitPileGroupActions.addLocalPileGroup())\r\n }, [ dispatch, ])\r\n\r\n return \r\n Add Pile Group\r\n \r\n}\r\n\r\nexport default React.memo(AddPile)","// Libraries\r\nimport { Field, } from 'formik'\r\nimport React from 'react'\r\nimport { Col, FormGroup, } from 'reactstrap'\r\nimport { string, bool, number, PropTypes, } from 'prop-types'\r\n\r\n// Components\r\nimport { RequiredLabel, ValidatingField, } from '../../../FormControls'\r\n\r\n// Models\r\nimport BurnPermitPileGroup from '../../../../models/BurnPermitPileGroup'\r\n\r\n// This is implicitly ordered so that the indexing matches the PileShape value\r\nconst SHAPE_DIMENSION_PROPS = BurnPermitPileGroup.ShapeDimensionProps\r\n\r\n\r\nconst DimensionField = props => {\r\n const {\r\n pileShape,\r\n propName,\r\n readOnly,\r\n label,\r\n formGroupClasses,\r\n } = props\r\n const dimensions = SHAPE_DIMENSION_PROPS[pileShape] || []\r\n if (!dimensions.includes(propName)) {\r\n return null\r\n }\r\n return \r\n \r\n {label}\r\n \r\n \r\n \r\n}\r\n\r\nDimensionField.propTypes = {\r\n label : string,\r\n propName : string,\r\n readOnly : bool,\r\n pileShape : PropTypes.oneOfType([ number, string, ]),\r\n formGroupClasses : string,\r\n}\r\n\r\nexport default DimensionField\r\n","const formGroupClasses = 'h-75 mb-2 d-flex flex-column justify-content-between'\r\nexport default formGroupClasses","// Libraries\r\nimport React, { useRef, useCallback, useEffect, } from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Field, Form, Formik, } from 'formik'\r\nimport {\r\n Row,\r\n Col,\r\n Label,\r\n FormGroup,\r\n Button,\r\n FormFeedback,\r\n} from 'reactstrap'\r\nimport { bool, object, } from 'prop-types'\r\n\r\n// Components\r\nimport { CancelEditPile, DeletePile, } from './Buttons'\r\nimport DimensionField from './DimensionField'\r\nimport { RadioInputs, RequiredLabel, Select, ValidatingField, } from '../../../FormControls'\r\n\r\n// Reducers\r\nimport BurnPermitPileGroupActions from '../../../../redux/BurnPermitPileGroupRedux'\r\n\r\n// Models\r\nimport BurnPermitPileGroup from '../../../../models/BurnPermitPileGroup'\r\n\r\n// Selectors\r\nimport { lookupDataSelector, } from '../../../../selectors/burnPermitPileGroupsSelectors'\r\n\r\n// Images\r\nimport cone from '../../../../images/pile_shapes/cone2.gif'\r\nimport half_cone from '../../../../images/pile_shapes/half_cone.gif'\r\nimport half_cylinder from '../../../../images/pile_shapes/half_cylinder.gif'\r\nimport half_ellipsoid from '../../../../images/pile_shapes/half_ellipsoid.gif'\r\nimport half_sphere from '../../../../images/pile_shapes/half_sphere.gif'\r\nimport irreg_solid from '../../../../images/pile_shapes/irreg_solid.gif'\r\nimport paraboloid from '../../../../images/pile_shapes/paraboloid2.gif'\r\nimport formGroupClasses from '../FormGroupClasses'\r\nconst pileImages = [ half_sphere, paraboloid, half_cylinder, half_cone, cone, half_ellipsoid, irreg_solid, ]\r\n\r\nconst pileImageSrc = (pileShapeNumber) => {\r\n if (Number.isNaN(pileShapeNumber)) {\r\n return null\r\n }\r\n return pileImages[pileShapeNumber]\r\n}\r\n\r\nconst SHAPE_DIMENSION_PROPS = BurnPermitPileGroup.ShapeDimensionProps\r\nconst validationSchema = BurnPermitPileGroup.validationSchema\r\n\r\nconst PileGroupForm = props => {\r\n const {\r\n ActiveBurnPermitPileGroup,\r\n readOnly,\r\n RequestFailed,\r\n } = props\r\n\r\n const dispatch = useDispatch()\r\n\r\n const formikRef = useRef(null)\r\n const setFormikRef = React.useCallback((node) => {\r\n if (node) {\r\n formikRef.current = node\r\n }\r\n return () => {\r\n if (formikRef && formikRef.current) {\r\n formikRef.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n const mounted = useRef()\r\n const reqFailed = useRef(false)\r\n\r\n useEffect(() => {\r\n if (!mounted.current) {\r\n // do componentDidMount logic\r\n mounted.current = true\r\n } else {\r\n // do componentDidUpdate logic\r\n const formik = formikRef.current\r\n if (formik && reqFailed.current === false && RequestFailed === true) {\r\n formik.setSubmitting(false)\r\n }\r\n }\r\n })\r\n useEffect(() => reqFailed.current = RequestFailed, [ RequestFailed, ])\r\n\r\n const submit = useCallback((values) => {\r\n // If Hand Piles, clear out the machine pile data\r\n if (parseInt(values.PileType) === 1) {\r\n values.PileQuality = null\r\n values.PercentSoil = null\r\n values.PackingRatio = null\r\n values.SpeciesOneDensityId = null\r\n values.SpeciesOneCompositionPercent = null\r\n values.SpeciesTwoDensityId = null\r\n values.SpeciesTwoCompositionPercent = null\r\n }\r\n // If Machine Piles, clear out the hand pile data\r\n else if (parseInt(values.PileType) === 2) {\r\n values.HandPileSpecies = null\r\n if (values.SpeciesOneCompositionPercent === 100) {\r\n values.SpeciesTwoDensityId = null\r\n values.SpeciesTwoCompositionPercent = null\r\n }\r\n }\r\n\r\n // Clear out dimension props that are not to be used for the selected shape\r\n const targetDimensions = SHAPE_DIMENSION_PROPS[values.PileShape]\r\n const dimensionProps = SHAPE_DIMENSION_PROPS[SHAPE_DIMENSION_PROPS.length - 1]\r\n for (let i = 0, len = dimensionProps.length; i < len; i++) {\r\n const dimension = dimensionProps[i]\r\n if (targetDimensions.includes(dimension) === false && !!values[dimension]) {\r\n values[dimension] = null\r\n }\r\n }\r\n\r\n delete values.SpeciesOneDensity\r\n delete values.SpeciesTwoDensity\r\n\r\n if (values.IsLocal === true) {\r\n dispatch(BurnPermitPileGroupActions.createBurnPermitPileGroup(values))\r\n }\r\n else {\r\n dispatch(BurnPermitPileGroupActions.updateBurnPermitPileGroup(values))\r\n }\r\n }, [ dispatch, ])\r\n\r\n const reset = useCallback(() => {\r\n const formik = formikRef.current\r\n formik.resetForm(formik.initialValues)\r\n }, [ formikRef, ])\r\n\r\n const {\r\n PileShapes,\r\n HandPileSpecies,\r\n PileTypes,\r\n PileQuality,\r\n SpeciesWoodDensities,\r\n PackingRatios,\r\n } = useSelector(lookupDataSelector)\r\n\r\n return \r\n {({ values, handleSubmit, isSubmitting, }) => (\r\n
    \r\n \r\n \r\n Denotes Required Fields\r\n \r\n \r\n \r\n \r\n
    Pile Group Info
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Pile Count\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    Dimensions (feet)
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n Pile Shape}\r\n id={field.name}\r\n items={PileShapes}\r\n propertyName={field.name}\r\n selectedValue={field.value}\r\n errorMessage={form.errors[field.name]}\r\n readOnly={readOnly}\r\n />\r\n )}\r\n \r\n \r\n \r\n {\r\n Number.isInteger(parseInt(values.PileShape)) && <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n {Number.isInteger(parseInt(values.PileShape)) && <>\r\n {'Pile\r\n \r\n }\r\n \r\n \r\n \r\n \r\n
    Composition
    \r\n
    \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n Pile Type}\r\n id={field.name}\r\n inputName={field.name}\r\n checkedValue={parseInt(field.value)}\r\n invalid={!!form.errors[field.name]}\r\n errorMessage={form.errors[field.name]}\r\n onChange={field.onChange}\r\n readOnly={readOnly}\r\n values={PileTypes}\r\n showPrompt={false}\r\n className={'pl-4 mb-1'}\r\n />\r\n )}\r\n \r\n \r\n \r\n {\r\n `${values.PileType}` === '1' &&\r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n Type}\r\n id={field.name}\r\n inputName={field.name}\r\n checkedValue={parseInt(field.value)}\r\n invalid={!!form.errors[field.name]}\r\n errorMessage={form.errors[field.name]}\r\n onChange={field.onChange}\r\n readOnly={readOnly}\r\n values={HandPileSpecies}\r\n showPrompt={false}\r\n className={'pl-4 mb-1'}\r\n />\r\n )}\r\n \r\n \r\n \r\n }\r\n {\r\n `${values.PileType}` === '2' && <>\r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n Quality}\r\n id={field.name}\r\n inputName={field.name}\r\n checkedValue={parseInt(field.value)}\r\n invalid={!!form.errors[field.name]}\r\n errorMessage={form.errors[field.name]}\r\n onChange={field.onChange}\r\n readOnly={readOnly}\r\n values={PileQuality}\r\n showPrompt={false}\r\n className={'pl-4 mb-1'}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n % Soil\r\n \r\n \r\n \r\n \r\n }\r\n \r\n {\r\n `${values.PileType}` === '2' &&\r\n <>\r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n Packing Ratio}\r\n id={field.name}\r\n inputName={field.name}\r\n checkedValue={`${field.value}`}\r\n invalid={!!form.errors[field.name]}\r\n errorMessage={form.errors[field.name]}\r\n onChange={field.onChange}\r\n readOnly={readOnly}\r\n values={PackingRatios}\r\n showPrompt={false}\r\n className={'pl-4 mb-1'}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n Species 1}\r\n id={field.name}\r\n items={SpeciesWoodDensities}\r\n propertyName={field.name}\r\n selectedValue={field.value}\r\n errorMessage={form.errors[field.name]}\r\n readOnly={readOnly}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Species 1 %\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, form, }) => (\r\n Species 2}\r\n id={field.name}\r\n items={SpeciesWoodDensities}\r\n propertyName={field.name}\r\n selectedValue={field.value}\r\n errorMessage={form.errors[field.name]}\r\n readOnly={readOnly}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Species 1 Composition Percent & Species 2 Composition Percent must Total 100%.\r\n \r\n \r\n \r\n \r\n }\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n Reset\r\n \r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n \r\n
    \r\n )}\r\n \r\n}\r\n\r\nPileGroupForm.propTypes = {\r\n readOnly : bool,\r\n RequestFailed : bool,\r\n ActiveBurnPermitPileGroup : object,\r\n}\r\n\r\nexport default React.memo(PileGroupForm)","export default \"data:image/gif;base64,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\"","export default \"data:image/gif;base64,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\"","export default \"data:image/gif;base64,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\"","export default \"data:image/gif;base64,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\"","export default \"data:image/gif;base64,R0lGODlh0gCYAPcAAAAAAP///4sjKHYZI51GU6JZZXYZM4sjQJI8WYtSaIYxZH0dW29VbVkMW14AZ2ARaDwAS0EZS0YRc1kvhiMMVSMZTwAAGSMjiyMjZF5erTo8gigshjxGnQAMSWJxrwAdf4uizCNZqABGnQxPogxBgxlZqAxZqBFgrQBerU6SzHGt31JneBl2vSyExjOLzKLM7B19wh19wDqRz0ad10+i21Ki2lmo3l6t4lyo3COLzG+46Ha9636841mo1UtvhIvM85HQ8zFsi5LQ753Z96Ld+Kje+KLe+Kjh+X3C3K3m+4TH3Lrq+m+Jj8X1/TySn+T7/jyMlMz7/9n9/97+/+H+/+b//+////X///n///v///3///7///L//ub/++H+96jf0GyQhlNlW8fqwJKiifT/6P7+6f//6///8P//8///9///+f//+////f/912ViPP/7zP/80//72f/4y//1xP/xvZeGT//mrf/nsv7hqP3muurHhvzVl/3ZnfPUn+a8gPnQkuezb+24c/TCf+29fPXHhvvMi/jMkNmdVeGoYuatZ+ataIBvWtidWeatb9CRT92iZ712M8J9QL13PMeEUtSdcbhvPJc8HXlBL30dADUMAGcgDI9ZS51GNYQvI51GPosjIEYAAB0AAAwAAC8jI/b29u3t7eXl5ePj49/f39vb29nZ2dTU1NPT09HR0c/Pz8rKysnJycTExMHBwb29vbm5uba2trOzs7CwsK+vr62traioqKenp6SkpKKioqGhoZ+fn52dnZeXl5OTk4+Pj4yMjIiIiIWFhYODg4CAgH9/f319fXt7e3h4eHd3d3V1dXFxcW1tbWtra2hoaGZmZmRkZGBgYF9fX11dXVpaWllZWVVVVVJSUlFRUU9PT0xMTEpKSklJSUZGRkRERENDQ0FBQT8/Pz09PTk5OTU1NTMzMzExMS4uLi0tLSsrKykpKSYmJiQkJCIiIiEhIR8fHxwcHBsbGxkZGRYWFhQUFBISEhAQEA8PDwsLCwYGBgICAv///yH5BAEAAP8ALAAAAADSAJgAAAj/AAMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmPp5xpxNPAiBlILLjYeZDkpM2bOBWqUpmxDScdczB9aBKoBJWcSJPa3JlQ1amHaQ7F0BNkk5JINLYo3cr1I6lYBk/56kaNFMQ/Gur0YOQEwZCucONyLJWrGwAAZSPO6YThCB9QIqTISbAIhxa5iBMnTEmKFrW7d9mlkvjSBBU4lmRgEWgnQxXFoEMzzYUOMoB3d40FcBVLVSmKaR7VOBzxlKrQuEMyDVDKGWSVp57GcmY3V4BcuVzdZsimj4cnC80adGY8t3WOuwXSKg3gNcJcxpyh/wvuTFjyg3ku+QBhRaH56dWvy8f4lGBvAMIcNgavmrQzY64EsBxDpwDgjHcCUTffghbVV5Ar3UgXUSmqxHLeb65QOGBBvqFDy0C+xMfgiA5lVxApEh5UCjDaOOPMY79p0w052LzyCi+qkOKKbwYGYEw3wrjy1W8IkmhkQyY2ZIpjALijDXK5qCILLK7k4gw36txjGjXCGMNKAE+VEosw3RhnGjqxpHnkmk3x1FAs2ACATpAFVXiQKsKoA8A51diDFy1FBhDLmcJAIyKbiILpZkKm1AWAMrcgRJxCrphjoCzClGbOcoOmFotZCiYqakPAAMBOLoESpMpdG97pmzOy0P+izaV/FhnqqGx+lRApxdwVoEI8LtoUNAA0Q8pOTZpikJq4spnkQKVww482DiK0KmTVKrRdXrKUg86vzeL6bACv5ANAMSlKalp+Dp1CzXgBkCLMuQSFGO6az7KSDz6zIHkXWXeluqtvwQhUCz/MDHTrvSOW4ktBtPBzTrYJ+eYLLKb4AsDDEE0DAFgB1AJAdQszvKYxAGiTblPU3ObMbapEGFGm9Q3ab8kmy1eKarxl4881ECH4skAoSmQMvAEcA8ArpQicc25MuYLOOuZUNHS8qrhSbSnKqdIq0dS4o2wA2DhDitNPi+aMxs8A8DWSxngjjV2m1W23gVGaRco8zwj/VGA1h6ad2yvroDMLOhw3pKMvMJYzTeAIHcvKLozfdc4xInvnCz+JC56b1Ny4u87KYfnizl1rCxmALxTrpwo04AAwjzTKkrIPMp5bp7EwppQCwC8KiWVXN8fIMt3bEanSNj8feoNN7qGV8m4sKdWVUCzzANAN6xWr8sYBP1wUjji0kg79VlJT89RO6AROiqPPfLnQy9+Hb1EwAKRCTT31gHx+V6TYnXRUEacilUIZ6Ggf2h5UivphBE0BWAcA+vU/rrjrWwQ5RTyUQRBXqEMfvjCfQt4ggDBkogM8yAJFhEGNALwIALiooFJigQ5qBIoUAPgQb1AmDBF27w2fSAEX/waxgSZQxBXdoQ4zADA2GdpEXhs7SCsAYJZguKMbyGMI/cAXADs4oCYU6QYt1KQOHTrRJBcEV0GEsY7VPcqH8/MeF72YBEOsgAFFiMgx3AGibpzRJDS0YUKo8Y15+Y8iWwwfHQOwhkbcICKyGBlYCtS6P24Eip07CADigcGLlIIUDlxkHApAhOThTSBUtCRI0riQVwCgH5PBSIYOcgZKqECFEFlVqACgyo8EcoFuNJCBhnYKOErqa2rwQwSY8IKI4JAa1elOLy85r0waRHrpGMYqBKSKKAWAO+rTUEOuthEAyOI2gzLmNBvCSoUEspIC8dpXYKQSCyknXeTUiNsEAv+kdTKENter4QJJgTJrNuQ1w/GNccqTi1ggI4sUAQAycsEKafqTIphcyCm60UmN5EIY01BfzMpjRosAQBqkEcdFKdLOhOTCQOqkVC58QRzTvOZYFjKOXdDhjE8Zw5sOwQs01PGKlUqEFgZa4H1KWhFVoKxuBhUIhVoTAFrwaDUuEsYhB7IqaXzMqBAh6MgWIrVuwHMipZjXXdAR04E85Vi0aGgA5tWNngZgF+7ARzLA+pCNogOiAcRPW9mpkpfmcCNTvU2cxAFMvmoHpsF7lxoz8tL8vNSPHkmFN6Lo2OigDHIEQaogObKdX70UohPhFQDywdTOhoWjgP1sR2hxiqb/DcRKs1WHO4SBCtdqC7JNQQcWOXLBbKFqIzEb2WBXKlbQgggAxlguWdERXYNIFyE7S6pvgwdbhUjPQ8Sdakjepz3U+hapZnNnDc/qTI05NyOx4Oh7t9tchWQUsd0YLkiQ1cPtcvev/52sRb7SmOsqbl7OYO920evDl6ZXI1LjGUhI042t+vdEsh3YYTfiXt0Ux8AXVYVwIVpWBT/kk8YwL0XuY4zGbvel1Y2cADVCUGFxhLwtu7B9fdPaDEoWuWQx8URoCF4dB9es2hIoR9YGYp08JoRGdil0RVhfCCPNI2k1kJB9Swoe6ySBKlZchj1CYQFHmavCPSuMm/wgY2wZ/yIQah+bL7rmhHy3xxNx13wrch9huNi/Xd4wQt6pke3E+MYay/GZrZXmXVVzzgKhIZ4vsh0ILvo7U14MR808Ebl+RBVPhrQ/Az3p4wDXk+IJc9BQdqBLMxrJkVPoRnj654e8b8SuRojGDm2QEmdEFR9S9UPi275cq+hdkw5sfwviQIdkOaoN8s2yjd3B9S5meghp9jjzmREocpvabpy2QbaFNm0vJrpvdkilLUzt77KbaGPONhfVyy7sfBjcD7I2owG8EHMvS9AayW6L8V2QGWOa1wnx90Ay5ApOY/Sywtaxu+2M7IcoPLDpZgiRS53r9MGT0BafN7SooV+N8FfUYP81uHUfHRF/n0LcF/F2xi88cYT41eEP2c6eI1Jmgvda3wdxMJtLwVGORyTOuUB5ygUb67FipBS0QDmLa33mmh/E1wMWRr27neiIRxnk1lX5EYGOkY37fOWcPcgF3x2RnyI31GcvSEvHrWSLbGcuCKb6on8ZuXin9mhG10/P406Q+94JzBh50cyvLl/Cy/3HB2+yU4krbb3vve7XrDif5yXhmGvs23E3/LLI3mlFY2Tdjn98R0/E8orQFsjKTT1B+K72TVskzjg/Mastv2jRF0ToFlkVlGMOcdn7ePWFl7XrhcT7ZTXe+AOh/c9hnVqaZSQlTId+vAoq4+ynluSLLzz/gsN/5pvbHNsYLWbSMUJhtvvzR37OCIMRQu6K0LDzTb23b8X0HmOYJ/cHUWXW5XdtV2yoBl3N10sWEh50UVfCwHF+hTwxw28VUUzEV14ZARmo9D8WIlXAlgsf0iF25RpVdWq/l2loNS8JGH0JFHgNwUsbCIPQw1HmM1W2YRfxoD2PMQ4u4gy7wBuaNxFSA3q5BHcKIYNIuBC8tIQy+DRI5HRNYQ7sAAD4MA7IcQu2MFOW0g71QH21ISDud1Dj94IxGIOmURBMuIGiUggXEAUHwSNshRCw4BvagAtOQwrDAADwsDHSdVrsJ1wASBBLGACDeIRqSIijwoZuWCfrchC4/wAA0ABR5rcd3qALtpYpXvcg8rVcg1iIdTMQSXiIiKKI01E3gTIoMfRbDxYv1QCFZKU+FtFnzReKCNGEtDiKFeAGokACSxBPckIMZIIfBIE/7hdokDMLwrgYONNeeJGJoPiMtXiGt8gmhUABQlAGktACV+AjB2IbpuYdg1IwCYF1VwcP7xCAnLeCqEdtirgGiYACn9FapwAWu/BVCbFrcPQKuxUWKRZ8RsiObeiOKNAFgGA/cUUQrvSD52dpDIFECllVYcgQ2dVqBNeO71gFaGA/yEEQzgANCVF/DyEytzCBgRg5g+dzFgmPGSkQG+mLbyNW0KYQ2FBQIEZsO4dvK/95HPERDt9wJ921EGICMdZgUXkmbUq3XTl5NkQDQwZRZwzhdkQjHrHwDQkjEd7mjPh2LJGWSiMHcDoBhS/yGsGgD0eVQBEJfS3ZDMtQbbAYgF7jNU9RHKeQdA6CQyUpIPqnfQrRkgAgjph0NlUiDC90N6aBGuawC9QzEP53UCgzcHppEEdzNRtZIMqyUeoQDEcDGdTAUMjxll4DC6ixWtvAI6iTC71AD9FRfI+pIhVyG+jwDtgQC3cXMtxBHbO0EE+1Vr7wSd2UmQAwDE5jdqvpEK5AU8WADeSwh9FwlwJyN92gRgUyhYdycsMpEceQDQBwDb4QgnIygpVkIbQAlwn/AQCw8FJ5IXPVWRswYgsFYYMBACPjMZdeAxEKUiDK0H7pGRG7VgzocFDo9EIq4QshcpuaBDLMoA9ylp/O9iHKUYLhVyUuEgu9sTYikkOl0DbmsILaRwo8dTZgQQrvgpV1Elf9AYkAoDTvwA7kp5fGMAux8BjLEWjOwJwlwgvykD1eqKCLkXRIdRdb9aLao1UaGi+y8A134Q3rp6P2NS/ikA6QAQytIxbwSaFw2aCs+YE1pYfFQKPpSRzAxh30QDdJlxwpwjVWQjeESZjpIA7ykJhKqnHA0ZUAECBNIy+loRoUEii20U2PAQ/EACXI0TXbIqJ6SRqIo0k9InfoxB2q0CGbTuGLqbEyvnCWbwqR5uMuRGlzr3GmX+UMTrpWdOobQ1qpBDFTFJELcWIacZJgpNoRpYAIIzAFdGAAO7AGinACn5EQanUXylCcXNqqDcEHErAEghAKMEAGlWADWqFrd4EMcdOfwAoSbeAJSDAJYDABYrAARnA9PUUK+RV10QoSaOAIUKAAX0AAY8ABUhCuXUEIoxACXnAIFjADWnAHmpADuMSuOEEHA6CsewABQCAQheAC+aqvXTGwBWuwW4GwCgsXDNuwEBuxEjuxFIsYAQEAOw==\"","export default \"data:image/gif;base64,R0lGODlhzQBSAPcAAAAAAP///3YZI51GU3YZM4YxZH0dWzwAS0YRc1kvhiMMVSMZTwAAGSMjizxGnSNZqAxPogxBgxFgrQBerSyExh19wkad11mo3na965HQ85LQ76Le+Lzm+H3C3Ljt+zyMlMz7/9n9/97+/+b+/+b///X///3///7//+H+96jf0GyQhsfqwJKiifT/6P7+6f//8///+////v/912ViPP/xvfzVl/3ZnfTCf/XHhvvMi9mdVeGoYuatZ+ataNCRT713PMeEUrhvPJ1GPh0AAAwAAC8jI/b29u3t7eXl5eTk5OPj49zc3Nvb29nZ2dPT09LS0tHR0c/Pz8rKysnJycjIyMTExMLCwsHBwcDAwL29vbm5ubi4uLa2trOzs7KysrCwsK2traysrKioqKenp6WlpaGhoZ+fn56enpubm5qampeXl5aWlpWVlZOTk4+Pj46OjoyMjImJiYiIiIaGhoWFhYODg4CAgH5+fn19fXx8fHt7e3d3d3V1dXFxcXBwcG1tbWhoaGZmZmVlZWRkZGBgYF9fX11dXVpaWllZWVVVVVBQUE9PT01NTUxMTEpKSklJSUdHR0ZGRkVFRURERENDQ0JCQj8/Pz09PTo6Ojk5OTY2NjU1NTQ0NDExMTAwMC8vLy4uLi0tLSsrKykpKScnJyYmJiQkJCEhIR8fHx4eHhwcHBkZGRgYGBUVFRAQEA0NDQsLC////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAALEALAAAAADNAFIAAAj/AAMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePDZWsedOnTpw3XY6AXMmypUuFTZpEAQOmDJ+biwDo3Mmzp8+bN2mCianypdGjSAMoaVKTzyCfABYBLSN0j6ZXfKbE3PoFEgBDQsHQAQp1Ex86YLQ0MZK0rVuISmY67RkUTJQmShJyAYCH7UAwVQZygXXI78GYVZo+5cmnzVDDbyMfVVLFJs9BaO9GfAOAS0EjmxYRdNIIlBSIR5posblpp9THkmN3ZEqntU4+ZarkragEwBuDbXQ2IWiEEyKLRlS3WRy1TZWisqM/VKKFz85BzndnNMTH4JGd3Qn2/06zkbbtRc4hS18fwEiUNrYHlYmiPiMdWEiA8xxOkA4AJh5RV5tO8mnHXmRGVOEfAJs4B12AAJDhHV0GGTIIS9RZx2AbURyYVIILLlKGgStxcqF+g0gRRWv8DdQbHi4lCN+GHroURYgjHpUFAEsY1MQmYAQAQHuNGXTHJUi9F1oZD9aY0RFltLZJjkmhd5AWRQ0pkBbqfRdYUgsOUkV9TkYUhYZ0dOhWFQA0aZCWCS3nlhFa5DSlm2UulGBOi4CB51FWLgQnQk0A0GJbTQQHAB2H5omQEWC0xseXkrH5p3gMFSnZEZECwEejjgoEqaSgvhVJGw1pwRCb+cW2Z1Rqhv86KgBtkCiZGDw2NGhCq4QXXRU5feoosJ7aGlsbhjg0ZA4NgJCQGyeuRywfl0rWhHXCeriJqroGwKyzhLbpYadlkPmWEWUwSOmBvVXbn7fNKrRtjegyGKtkKwJQbpllROtQDgvMQEQEHBwkp5NKPEUtgv4NYix7Ij5Eh7cKaODCDxSUYFAUAJgrnRabbLLuUU3kFKSjvT180LLNwsDDBCQcJLKjR1hHh8cfgRGVyuzBQQlELIPgMswH6RFIqAHovAjPGxnh381IBzCJIEDDK/TLMRukxq5lKpHTyAE+xW3UMz+k6rdDZ11Qu1EbYR2qICkRcqllfkd3RgDcG2q6fOD/TFEVmzgc9UCFRrQJRIOcPDibg/gdEeOOHwhlIltVvlViYVkX1lCWW46HHe56CHjjGkFe41JMNcVHTlCVBdRNmngKFHOt9yRVYzRVoQUUkSclN+kXcQy8W6klSodNq/c0SF1qSTEFIoorC1GhV0ChGk1j8fEJXWeNwQcWd7/0e+8IjW9UE4lJAgjtAFziCB80qdVE6AGkNh1ERhi6UEwzgdEGILEDD1p0Rz+NCK8ioNkE+SJyhCfghg+28VQiqHIXpjWkUNlaiAULIoozUCQ5iWkDH0IhQLuEDyNsgptEBrGJDTpkCVPwn4YAQAr4VWEtK9lJG9zFtYVcYmLlmclY/8BTBrUU8CE6G9tD0gU2iaiGDqzDjF1cqBHW6WSHCemhQmzCEjqBIXk6AcV8FpgQ/1AxABwrQ0WiIAhA6GQRdNDCEyQzQx2SSYsJ+SJSmoCFP2gIPVno0QcXsYjegWZ4DlHCF3XCiTpE4Ygt0RkALDEGzuHpcBDhWGSYwodRRIVKESmUGhuSrhMSJApvgEVz6CO6qMhnNnhEihPKwKc2bCEipWRIb0a5ECUBYBBvaJWTRCk3nimxIfkz5VGOoIWnmIIOz0Fm4DKlQIVEoQ6qHASWogaAvDxSIbFEiP4OtIQsDGgQghAmQtjURMIBIHoEMcOMBjEHdSLNV9fK4grhef+gJrABFbSqFiEVUhv1JKgRAEDENgeHKVH1SZwSgR/SiNUGQRqEnQhJF3SikApWgIGMG/kWSPRon0QwNABmUBgVCqIzPMFRVP5BAyQ9ItKVLHQgmIQISU96LQBgAjrfOaZSABCYL7iiEcpsSU1BcrCBhPMgOz1pAJyAiE3EahD+2hIAkpAuQ8wUJEv9iBESR5CnGqROUiVOcKiWNHERhA+IIEUn9CaZsH4kZU51olkdZQZaBaBQetsEI1Jhz9jY9SPf3JJe03pRAMRBSNHLX94OdNiP5FMpi2VsQXb0huURpFCV8FBlPQIaVe31s6cNVRo2kQd/jQEAVtCsRgrVm8z/ypYgifAkQTKR2ttu0T+29W0ArqATgvjhnTRBo1CGowWhHAFSQlGKUALTv6EEoLk0OYIio1td5joXusndLmCUSxPvZle8Qerudb8rlCGJl7rLXW92mQCAOyRXvdj1E3iD9F7yWhe72g2Lf82rXwH3F79CWUJxBwIIx9w3vvl9roGnGwDMPSYsAeYuhNkb3f5aeC0YRu+A5VtgmnhiRBT+8H6PQFyqpHfD2d2vdHNX4eWCN8MPLi+JJdzhFNs4LE5wq0BuIlyNyK2d4SqyQNawK+opGYWpLVyRj9AJ8hREE5Z4MkboCpPe5skRx/EOkLR8EU45RMq+jUMrTnOQMAAg/wxkRuBDGYJm2cqhhQRdFEjj/NduMgStsjVCImBhwSZQAhZY4LNEygBEhURVqj9qBJsZcgRC6FnRHXn04Gp26Uxu4hNiwDRBdgABEdCAABiAQQ8kMIIASLSMjpDqEYJTijl88BBRQbKSbYAAD9xgCBVoQRAucIKhIhkPRxucFCaRa4zMmkF3KKySZSCEDgBBBQlYgQE2MBDAPezVoerpJRLdtDJk86ZKfoEPPlCAFAyABQ4IAUHGhJBFCNVDV8BWUifiS1CE4atligEOivAAFOiAARYwwdoarRkh7ftD73HELx9uESwkojXaBLiHaCAAYtfgABkwiBEC5Zj6+Zk9R/+YQyFuowUnuKXfZaB4WuWmqk1MrM6xUUK/AHCKPrBSNlgwxCMYFEcA8flMHDsc4Fy1heSJ6IxIOUIVZlQKtMgcaQvilK+iPvXFkEILUJeMFLzQhijGwQxXlw4Y2EfUNjS6i9cDxCpuY91AzyQRqngj/LJw7zIlqidl0MTWObIUMFxcJ2ZhwxzC3jbV2ISEDMLNUBgf9Rl56hOecfYT5vBFKw5CEzcUdUJSk5i56CQUN3FxE6RgUdnM6uQQUUtTrLiKPlBlfqKnCDOzQJObsG958EsLUdzS14Mk5wlioIkIIXiZ4OMl9y5xQkxogjwrEugmbt+cCTtXOSOgjvuIyZwxIvjABt/7xI9oAUxMpA19yaCO+od43+vqWLv6I/51mpiEJgCx3Ji0//8AGIACiBQBAQA7\"","export default \"data:image/gif;base64,R0lGODlhKgFrAPcAAAAAAP///4sjKHYZI51GU6JZZXYZM4sjQJI8WYtSaIYxZH0dW29VbYszi1kMW14AZ2ARaDwAS0EZS0YRc1kvhgAAGSMjiyMjZF5erTo8gigshjxGnQAMSWJxrwAdfwAji4uizCNZqABGnQxPohlZqAxZqBFgrU6SzHGt31JneBl2vTOLzKLM7B19wh19wDqRz0ad10+i21Ki2lmo3l6t4lyo3COLzG+46Ha9636841mo1UtvhIvM85HQ8zFsi53Z96Ld+Kje+KLe+Kjh+X3C3K3m+63m+oTH3Ljt+2+Jj8f1/jySn8L0++T7/jyMlMz7/9n9/97+/+H+/+b+/+b//+////H///n///v///3///7///P+/OH+96jf0GyQhlNlW8fqwJKiifT/6P//5P//6///8P//8///9///+f//+////f///v/91//7zP/80//72f/4y//1xv/0wv/xvZeGT/7mrf/mrf/nsv7hqP3muurHhvzVl/3ZnfPUn+a8gPnQku24c/TCf+29fPXHhvvMi/jMkNmdVeGoYuataIBvWtidWeatb9CRT92iZ712M8J9QLNnL8eEUtSdcbhvPJc8HXlBL30dADUMAGcgDI9ZS51GNYQvI51GPosjIEYAAB0AAC8jI/b29u3t7eTk5OPj49zc3Nvb29nZ2dPT09HR0c/Pz8TExL29vbm5uba2trKysq2traysrKenp6GhoZ+fn52dnZubm5qampaWlpOTk46Ojo2NjYiIiIWFhYODg319fXx8fHV1dXFxcW1tbWRkZF1dXVpaWlVVVU9PT0xMTEpKSkRERENDQz09PTo6OjU1NTExMS0tLSQkJBgYGBAQEAsLC////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAANYALAAAAAAqAWsAAAj/AAMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcZVoVzKfKiK1MybOEuuQgagp8+fQIMKHUq0qNGjSJMOzcm0acZTwQDkAuC06SqpAagGOBWzqtevBqECCGZTK1iXV3MJ1IoM1tm3TsUGOzXQLNyUaesGuPqs692/K0VNnVvQLmCSefXyBOD2sGOSggEgU3XQ8OOPieue8vlM1OXPHENNRbYqoWXQGkk9U1s4qk/WqGNLDAXrGemFp2VXVA2boM9mzHp61k1cIe1nzxrjLo6RN0IAz1QFSwULK/PrA2sn97sc+0TnBzd7/yZMKthw77p3boeYG31C8AdFaRXl97z7zzul2nfY/n5B+M8JdMp+/j2mCk+5EMhfgQsBGGAAhDH4mFgJWtRfgQ4+GKGEf8lF10UX3pehhh9y+FZ5Y5UIookEjfhgL3S1cQAPLDoV2YYZheidiw8OJCONNeIU2W0d6Xgdjw/CYtOPQc4UyiySlfaRkcUhSWIAbQjwxSUc5IBFkykd94yUIFGpm5VXttHJCVsIooESYJokJizcTckhmmnOGIAdDxQRJ0mtIEdnSWaihueDqyypJ59+/glSfoOaVOhnh/YoEJN8GlFICgwE4ehGCCoo0qSPqUZMnRFpBSOWi/YZQBqL0P/wKUanIFOhSqR2hIcDQpDhiApW1AFBo809c+qKEKpY0BsFADFrRWL10lKuHLGhyQ1yWOIBE4CQIEVGpqIqkVY4ElSGJCh8+WxEHrpE7UZnGOKCHj5kcsQjMWhR7LEYkausQGj4IUESLKz7kCi9pDjTuxqt8UcGdOigyBII/ABHAonUkMV3xoo70XweGwzRkP+ylFsoIXsUxyYXDMGHJyJAIZAdGFAhUbgR0fegziJTNCSZN1lGGzEo+VqCFG5Q8sIVAZzRiAwbQ4Rzzm2h6m/Ps1VHJFN2HQdAySmp0UcHTUQ0tUStQBfpWgKVi7Vx2rXilVn5ATDLTXlUsgMIVTz/dPZExPS0XlZtg/02QXOmbJIosMCyyikDsl03ANLIAgtdrTQOC32au3WK5qWtojlXnYtCSucBqDJ6AJk3zrnmW4G+1+i0wXKLNMWYgrrqjWOu+euNb3XLT9D0woqqhh++l6CKo6TKM0LRAr1Pw/TO+u+1B39646Xxfvn1rm8fvPe+u569W+J3v3orty8zivhukQ/+5ucHQIoszgD1C8N/5jdL8yoJRcKAEgCv9SR5XvnbRFYROKBAIxRaUYWosJafWzllFQPsSeAGEopW8AQZAMyJAimCiqC45WrKE1BULOiU2uRieAA4lWV20puzjJAixCDGKkQxPc+g8HBysUlT/0LBQKoMJyrPKAtCYAKXG34nFbl4BoSs88OetasqkpmFfYiRxADIZ4In6thGQkEMZNgkKqaDkkCUhLUbIXAlHbxbyQCgilW45o0JFONGcsGvYARjFc+IyuGGRJmmIEwycjtIKYABvVxsRimQjKQkJ0lJobRxNEC7CeNOQQpHIkQ6ktkcaJw4ESgVUiChOMaY3nacreHkFIEjBtgYx5NenJJSesSIAJ+hItWYEWtzYsrp9qJFhJwiYckB419IaTaECVEgaetFCGuknbXNJD/SQkgHefJH4jDzIbvkjmgYQ0FkDK4hhLDAE0BSxwDMohWiOsVUnlFMb+YyneuUiChy+P9ML3Lxls+q4DQFgs+OPIknyjEIEXmiwyPlMgAFlQgsgsGdUxirn7M6kH4mEtGNlIeJB+kkcnKB0TM9FKLqjEhNDFKdXAyUQRRSpkI6ahGRJrQgRAwcaV66zJOiNJ8OmQrQBAiARD7rihWhKUWq04tMDkQUs2gkHnHJr4IoVSFR7CcpuDhVCaHIbRxN6URUMZUBicqOiOTpYZx41YTskCDPI4ZMOeTGjbSVIQnLBUCfGlUArMo/pLwrQexYp5Y+62cdwefFMhY1t/qRFB5TRcLaMlfZhMKnBMHnGCDxAaASpDpDjYpTm/SkKH0kojSzWUJGWlIvwqKWe3UPGauKkIL/tqEBnhVQdFpkztbWqJWj9YjToIbTVhDDc8acZz0lNNuB3taz9AmFfQBJW9JWU60SERvZ/hNKBW1zLMG9T3Mj8tyBqOamULqbowJ1TpLkbW99EwU8Q+FbeUJnuSYaL3lxK5CrqBeVXAwvhyCF3YxIVjKiImIMQfrbHBZ4IN00r218O+BQsYRx7iQpQkTaRTDplyJbVdZVKBqnWm10JceMoUKKiIxWPNiyDrZINP0yzpuyKFqV7cgpStMLT8anrz6O04cnYlGg7XO3TUIqSor434OgtcUvJs6QbyZdgliUGBT2zyHBOhIJiiIY+CUILf0aW9LGGMTECEZBZhykyMgy/0weBECWD0zZdU0ZIoCUJgenYlQTIVYlHrQm4l47ljIL+cwU6UWft8rL/MZNJVCKsELjLGmR3dkhR7ZPS6N8mMSdRJ5qJoVvOwkdDbMS0WYLJI0T1mcGAbK9IwlFVP6q0CLqkNPiRXXOgEaK3prIf7hmiGTvBs8NR1EqWX4WGfuy1CYvr7r3qWCOL9Lr1UzwyS5OIYA7nLNgIFkgUKrhfWJKEiIGoybZ/rFUtc1BLiY7IX48j6xXCdOomEcnzEsIKKvG7nZzGyLw1OqE662wkYiCLu1EyJht2W/EuXs2vejMYMcSbLDUdST2RcYE6SzKhvv73QrlJ0Gm4mzvEHIkov8OwDNoXVxuCjiFywa5Qte2bEMXRz6VzLnOd87znvscKWhTs5Uv6h6g8U8hkLUoCxEX54Z6vDsPiSLQ2Iyey5Lp6LXmic05bOqnQ70hEX9mjf2jNb1whC5R7HitY8lgr39dIfThmT+/7Z7FSAnrjEMOGKG6brc/REeAVFFcp40fnyCDbRlBxk4dm1a/p4ohoP2sVCoOlsX0pDTv6mQ2E8J3qXTV8b5ZyJdLRNRWu+eR0OjJ4XP15YIfhOOE1wgaDjGCKMzBADhIAyJMMAUGmaVOpMgkoz9/FibB227CiPNV2NULOqm9IAu3eUn4MAEkBOITLRDDJGagrwLNJ6EWbTL/dSkvE+OHtNFzOahhOvhJBFE4xfSM/UfYwAkiRMILFADDAoQgIa3kQjn+RRDhdh3mFxZdESGkYBjBcFN2RAqqUGwH8V2VNhNmwAhOoABdQABhsAFQcAeYYAPqgh5GZDdeJAqqcEqyBgAvdxlZsiVdEoIGsSF2ASUloh3/kxD2FX9OsQaDAAohwAWGUAEwsDGEsAIwiB1UMRhXkVC99kvYoSZs4iZwonB+QTc9MQqvYAys03aIkx+39hVzMADctwcR0AMEZYS6EWZrgXPKoIKDpWrogSmu8knnoRWq0RPSQA2/gHRRtBoyVxVFeISf8TyCJhU9MQ2+cEokdx9ySCwx/1giVBEKi1ENKrZEOsWFjhGIxIFMayMUz6ALqrSCsdGIHgiCBSGDAZBBPVELBtF5QQZ6HcFDgtMYQLFytxANyfCHoNGIEIWGBCGDuzAU/zM9AMAMuvATATAVPeEWljcgyHgVPaFmGUQnxLhjyKiM5NSMONcTe+ET0ugT1OgT1siN2MiM4riNVAGNY5GK4HhZ4qiOSQiOAaCNz+iN7LiM7hgUyOAKYwELEsQ6fkV+gKGJBEFrcsYLP5F8sBALteFXxAeLS/UTc/F7U2FjLEKQO4ONuDBZzweRIfFIDol4RyZ9DIKRa/RMdlEKxEANADAMJOmRGiGJJ8Y2V6aLLIKKW00xT7YwC0IHkySRC0uXFZt2ODJIaWQikD7ZihHYE6YnMhEiH9aWlDexVV+jbW+1FkgplTcjSE/3c175lWAZlmGplWRZlmZ5lmiZlqgREAA7\"","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { isEqual, } from 'lodash'\nimport { array, string, object, bool, func, number, } from 'prop-types'\n\nimport $ from 'jquery'\nimport 'datatables.net'\nimport 'datatables.net-bs4'\nimport 'datatables.net-buttons/js/buttons.colVis'\nimport 'datatables.net-buttons/js/buttons.html5'\nimport 'datatables.net-buttons/js/buttons.print'\n\nimport 'datatables.net-bs4/css/dataTables.bootstrap4.css'\nimport 'datatables.net-buttons-bs4/css/buttons.bootstrap4.css'\n\n// Components\nimport withRouter from './withRouter'\n\n// Reducers\nimport ApiActions from '../redux/ApiRedux'\n\n// Utilities\nimport stopEvent from '../utilities/stopEvent'\n\n// Selectors\nimport { getUserToken, } from '../selectors/userSelectors'\n\n\nclass DataTable extends React.Component {\n static propTypes = {\n // from withRouter HOC\n navigate : func,\n location : object,\n\n elementId : string.isRequired,\n hiddenCols : array,\n columns : array,\n columnDefs : array,\n records : array,\n clickRoute : string,\n rowIdProp : string,\n ajaxConfig : object,\n onRowClick : func,\n disableRowClick : bool,\n disableDefaultOrdering : bool,\n onDeleteRecordClicked : func,\n UserToken : string,\n ordering : bool,\n pageLength : number,\n disablePageLengthChange : bool,\n redraw : bool,\n scrollY : string,\n onAjaxError : func,\n Failure : func,\n className : string,\n autoWidth : bool,\n enableExport : bool,\n }\n\n static defaultProps = {\n hiddenCols : [],\n ordering : true,\n disableRowClick : false,\n disableDefaultOrdering : false,\n disablePageLengthChange : false,\n redraw : false,\n scrollY : '',\n onDeleteRecordClicked : null,\n className : '',\n autoWidth : true,\n enableExport : true,\n }\n\n state = {\n records : [],\n emptyTableMessage : '',\n }\n\n dataTableInstance = null\n\n componentDidMount () {\n this.loadTable()\n }\n\n componentWillUnmount () {\n if (!this.dataTableInstance) {\n return\n }\n this.dataTableInstance.destroy(true)\n this.dataTableInstance = null\n }\n \n componentDidUpdate (prevProps) {\n if (typeof this.props.ajaxConfig === 'object' && !isEqual(prevProps.ajaxConfig, this.props.ajaxConfig)) {\n this.updateAjaxConfig()\n }\n const { records, hiddenCols, } = prevProps\n // Perform a cheap check to see if new records are available to draw\n const hasNewRecords = records && records.length !== this.props.records.length\n const hiddenColsChanged = hiddenCols && hiddenCols.length !== this.props.hiddenCols.length\n if (hasNewRecords || hiddenColsChanged) {\n this.redrawTable()\n return\n }\n // If the record count is the same, see if their properties have changed\n else if(!isEqual(records, this.props.records)) {\n this.redrawTable()\n return\n }\n if (this.dataTableInstance && prevProps.redraw !== true && this.props.redraw === true) {\n this.dataTableInstance.draw()\n }\n }\n\n redrawTable = () => {\n const { records, hiddenCols, } = this.props\n const table = this.dataTableInstance\n if (records) {\n table.clear()\n table.rows.add(records)\n }\n const dtCols = this.dataTableInstance.columns()\n for (let i = 0, colLen = dtCols.length; i < colLen; i++) {\n const col = this.dataTableInstance.column(dtCols[i])\n col.visible(!hiddenCols.includes(col.index()))\n }\n table.draw()\n }\n\n onTableRowClicked = param => {\n if (!this.props.disableRowClick) {\n if (typeof this.props.onRowClick !== 'function') {\n let { clickRoute, location, } = this.props\n let route = location.pathname\n\n if (clickRoute != null) {\n route = clickRoute\n }\n\n if (route.slice(-1) !== '/') {\n route += '/'\n }\n this.props.navigate(route + param)\n }\n else {\n this.props.onRowClick(param)\n }\n }\n }\n\n setUserToken = request => {\n request.setRequestHeader('Authorization', `bearer ${this.props.UserToken}`)\n }\n\n getCurrentAjaxData = () => {\n return this.props.ajaxConfig.data\n }\n\n updateAjaxConfig = dataTableConfig => {\n const { ajaxConfig, onAjaxError, } = this.props\n if (!ajaxConfig.url) {\n return dataTableConfig\n }\n\n ajaxConfig.beforeSend = this.setUserToken\n\n if (this.dataTableInstance) {\n const dtUrl = this.dataTableInstance.ajax.url()\n if (dtUrl && dtUrl != ajaxConfig.url) {\n this.dataTableInstance.ajax.url(ajaxConfig.url).load()\n } else if (dtUrl) {\n this.dataTableInstance.ajax.reload()\n } else {\n this.dataTableInstance.ajax.url(ajaxConfig).load()\n }\n return\n }\n\n dataTableConfig.ajax = ajaxConfig\n // Assume the data is at the root of the response\n dataTableConfig['ajax']['dataSrc'] = ajaxConfig.dataSrc || ''\n if (typeof onAjaxError === 'function') {\n dataTableConfig.ajax.error = (_jqxhr, _textStatus, _error) => {\n if (_textStatus !== 'abort') {\n onAjaxError(_jqxhr, _textStatus, _error)\n }\n }\n }\n else {\n // eslint-disable-next-line no-unused-vars\n dataTableConfig['ajax']['error'] = (_jqxhr, _textStatus, _error) => {\n if (_textStatus !== 'abort') {\n this.props.Failure('An error occurred requesting data to load in the table.')\n }\n }\n }\n return dataTableConfig\n }\n\n loadTable = () => {\n let { columnDefs, columns, hiddenCols, ordering, disablePageLengthChange, pageLength, } = this.props\n if (hiddenCols.length) {\n columns = columns.map((c, idx) => {\n if (hiddenCols.includes(idx)) {\n c.visible = false\n }\n return c\n })\n }\n let dataTableConfig = {\n dom : '<\\'row d-flex flex-direction-row\\'<\\'col-6 col-md-4\\'l><\\'col-md-4 table-buttons\\'B><\\'col-6 col-md-4\\'f>>rtip',\n columns : columns,\n rowId : '_fields.id',\n language : { \n search : '_INPUT_',\n searchPlaceholder : 'Filter',\n emptyTable : this.state.emptyTableMessage,\n },\n scrollX : true,\n ordering : ordering,\n autoWidth : this.props.autoWidth,\n lengthMenu : [ [ 10, 25, 50, 100, -1, ], [ 10, 25, 50, 100, 'All', ], ],\n stateSave : true,\n }\n\n if (this.props.enableExport) {\n dataTableConfig['buttons'] = [\n 'colvis',\n 'excel',\n 'print',\n 'csv',\n 'pdf',\n ]\n } else {\n dataTableConfig['buttons'] = [\n 'colvis',\n ]\n }\n\n if (columnDefs && Array.isArray(columnDefs)) {\n dataTableConfig.columnDefs = columnDefs\n }\n\n if (disablePageLengthChange) {\n dataTableConfig.lengthChange = false\n dataTableConfig.paging = false\n dataTableConfig.scrollCollapse = true\n }\n else {\n if (window.innerWidth < 768) {\n dataTableConfig.pagingType = 'full'\n }\n }\n if (this.props.scrollY) {\n dataTableConfig.scrollY = this.props.scrollY\n dataTableConfig.scrollCollapse = true\n }\n\n if (pageLength) {\n dataTableConfig.pageLength = pageLength\n }\n\n if (this.props.disableRowClick) {\n dataTableConfig['rowCallback'] = function (row) {\n row.classList.add('no-click')\n }\n }\n\n if (this.props.disableDefaultOrdering) {\n dataTableConfig['order'] = []\n }\n\n if (Array.isArray(this.props.records)) {\n dataTableConfig['data'] = this.props.records\n }\n\n if (typeof this.props.ajaxConfig === 'object') {\n dataTableConfig = this.updateAjaxConfig(dataTableConfig)\n }\n const $tableEl = $(this.Table)\n this.dataTableInstance = $tableEl.DataTable(dataTableConfig)\n if (!this.props.disableRowClick) {\n $tableEl.on('click', 'tr', (e) => {\n const rowData = this.dataTableInstance.row(e.target.parentNode).data()\n if (rowData) {\n const param = rowData[this.props.rowIdProp]\n this.onTableRowClicked(param)\n }\n })\n }\n if (this.props.onDeleteRecordClicked) {\n $tableEl.on('click', 'tr td.delete-record', evt => {\n stopEvent(evt)\n const data = this.dataTableInstance.row(evt.target.parentNode.parentNode).data()\n if (data) {\n this.props.onDeleteRecordClicked(data)\n }\n })\n }\n\n const filterInput = document.querySelector('input[type=\"search\"]')\n if (filterInput) {\n filterInput.setAttribute('aria-label', 'Filter My Permits')\n }\n }\n\n setTableNode = node => this.Table = node\n\n render () {\n return (\n \n )\n }\n}\n\nfunction mapStateToProps (state) {\n return {\n UserToken: getUserToken(state),\n }\n}\n\nconst mapDispatchToProps = {\n Failure: ApiActions.failure,\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(DataTable))\n","import React from 'react'\r\nimport { Button, } from 'reactstrap'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { string, func, } from 'prop-types'\r\n\r\n// Redux\r\nimport UiActions from '../../redux/UiRedux'\r\n\r\n\r\nconst CloseModalButton = props => {\r\n \r\n const { buttonText, onClick, } = props\r\n \r\n const dispatch = useDispatch()\r\n \r\n const closeModal = React.useCallback(() => {\r\n if (typeof onClick === 'function') {\r\n onClick()\r\n }\r\n dispatch(UiActions.closeModal())\r\n }, [ dispatch, onClick, ])\r\n \r\n return \r\n {buttonText}\r\n \t\r\n}\r\n\r\nCloseModalButton.propTypes = {\r\n buttonText : string,\r\n onClick : func,\r\n}\r\n\r\nCloseModalButton.defaultProps = {\r\n buttonText : 'Close',\r\n onClick : () => {},\r\n}\r\n\r\nexport default CloseModalButton","// Libraries\r\nimport React from 'react'\r\nimport {\r\n Modal,\r\n ModalBody,\r\n ModalHeader,\r\n ModalFooter,\r\n Button,\r\n} from 'reactstrap'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\n\r\n// Components\r\nimport CloseModalButton from '../../Modals/CloseModalButton'\r\n\r\n// Redux\r\nimport UiActions from '../../../redux/UiRedux'\r\n\r\n// Selectors\r\nimport { isModalOpen, } from '../../../selectors/uiSelectors'\r\nimport stopEvent from '../../../utilities/stopEvent'\r\n\r\n\r\nconst modalKey = 'PILE_GROUP_INSTRUCTIONS'\r\n\r\nconst PileGroupInstructions = () => {\r\n const dispatch = useDispatch()\r\n\r\n const isOpen = useSelector(state => isModalOpen(state, modalKey))\r\n\r\n const openModal = React.useCallback(() => {\r\n dispatch(UiActions.openModal(modalKey))\r\n }, [ dispatch, ])\r\n\r\n return <>\r\n \r\n View Instructions\r\n \r\n \r\n \r\n Pile Groups Instructions\r\n \r\n \r\n

    \r\n Use the Add Pile Group \r\n below to create one or more Pile Groups.\r\n

    \r\n

    \r\n Click on a row in the Pile Groups table below to edit a Pile Group.\r\n

    \r\n

    \r\n Click the  \r\n to delete a Pile Group\r\n

    \r\n

    \r\n Click the Calculate \r\n to execute the calculator to\r\n get the Estimated Consumed Tonnage data. The Input and Output files will be automatically attached to this application\r\n and available for download in the Documents section.\r\n

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n}\r\n\r\nexport default React.memo(PileGroupInstructions)","import React from 'react'\r\nimport { Alert, } from 'reactstrap'\r\n\r\nconst MustCalculate = () => {\r\n return \r\n

    \r\n Before you can sign and submit your application, you must click the Calculate button above to\r\n estimate your consumed tonnage and attach the Tonnage Calculation documents.\r\n

    \r\n \r\n}\r\n\r\nexport default React.memo(MustCalculate)","// Libraries\r\nimport React, { useMemo, useCallback, } from 'react'\r\nimport { number, bool, array, } from 'prop-types'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\n\r\n// Components\r\nimport MustCalculate from './Alerts/MustCalculate'\r\nimport DataTable from '../../DataTable'\r\nimport { CalculateButton, } from '../../FormControls'\r\n\r\n// Reducers\r\nimport BurnPermitPileGroupActions from '../../../redux/BurnPermitPileGroupRedux'\r\n\r\n// Selectors\r\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\r\n\r\n// Models\r\nimport BurnPermitPileGroup from '../../../models/BurnPermitPileGroup'\r\n\r\n\r\nconst EstimateTonnage = props => {\r\n const { burnPermitId, TonnageIsEstimated, CalculatorResults, } = props\r\n\r\n const dispatch = useDispatch()\r\n\r\n const online = useSelector(appIsOnlineSelector)\r\n\r\n const calculate = useCallback(() => {\r\n dispatch(BurnPermitPileGroupActions.estimateConsumedTonnage(burnPermitId))\r\n }, [ dispatch, burnPermitId, ])\r\n\r\n const outputColumns = useMemo(() => BurnPermitPileGroup.dataTableColumns({ output: true, }), [])\r\n\r\n return <>\r\n
    \r\n
    Estimated Consumed Tonnage
    \r\n {\r\n online && \r\n }\r\n
    \r\n {\r\n online && !TonnageIsEstimated && \r\n }\r\n \r\n \r\n}\r\n\r\nEstimateTonnage.defaultProps = {\r\n burnPermitId : null,\r\n TonnageIsEstimated : false,\r\n CalculatorResults : [],\r\n}\r\n\r\nEstimateTonnage.propTypes = {\r\n burnPermitId : number,\r\n TonnageIsEstimated : bool,\r\n CalculatorResults : array,\r\n}\r\n\r\nexport default EstimateTonnage","import React from 'react'\r\nimport { Alert, } from 'reactstrap'\r\n\r\nconst AreaIsExempt = () => {\r\n return \r\n

    \r\n Pile Burn Areas under ten acres do not require pile groups.\r\n

    \r\n
    \r\n}\r\n\r\nexport default AreaIsExempt","import React from 'react'\r\nimport { Alert, } from 'reactstrap'\r\n\r\nconst LegacyTonnage = () => {\r\n return \r\n

    \r\n Consumed Tonnage was not and cannot be estimated using the new calculator integration because these\r\n Pile Groups were created before the integration that requires additional data that was not available\r\n when these pile data were entered.\r\n

    \r\n

    \r\n Please check the Documents section for any attached Tonnage Calculations.\r\n

    \r\n
    \r\n}\r\n\r\nexport default LegacyTonnage","import React from 'react'\r\nimport { Alert, } from 'reactstrap'\r\n\r\nconst NeedsPileGroups = () => {\r\n return \r\n

    \r\n You must add one or more valid Pile Groups or change your Burn Type in the Area Info section.\r\n

    \r\n
    \r\n}\r\n\r\nexport default NeedsPileGroups","// Libraries\r\nimport React from 'react'\r\nimport { render as ReactDOMRender, } from 'react-dom'\r\nimport {\r\n Row,\r\n Col,\r\n Card,\r\n CardBody,\r\n Badge,\r\n} from 'reactstrap'\r\nimport { bool, string, number, object, func, array, } from 'prop-types'\r\nimport { connect, } from 'react-redux'\r\nimport { isEmpty, } from 'lodash'\r\n\r\n// Components\r\nimport BurnPermitFormSection from '../FormSection'\r\nimport PileGroupForm from './Form/PileGroupForm'\r\nimport {\r\n AddPile,\r\n DeletePile,\r\n DeleteAllPiles,\r\n BatchUpload,\r\n} from './Form/Buttons'\r\nimport DataTable from '../../DataTable'\r\nimport ExternalLink from '../../ExternalLink'\r\nimport {\r\n EstimateTonnage,\r\n PileGroupInstructions,\r\n} from '.'\r\nimport {\r\n LegacyTonnage,\r\n NeedsPileGroups,\r\n AreaIsExempt,\r\n} from './Alerts'\r\n\r\n// Selectors\r\nimport {\r\n burnPermitPileGroupsByPermitIdSelector,\r\n} from '../../../selectors/burnPermitPileGroupsSelectors'\r\nimport { permitSectionIsActive, } from '../../../selectors/burnPermitSelectors'\r\n\r\n// Reducers\r\nimport UiActions from '../../../redux/UiRedux'\r\nimport BurnPermitPileGroupActions from '../../../redux/BurnPermitPileGroupRedux'\r\n\r\n// Models\r\nimport BurnPermitPileGroup from '../../../models/BurnPermitPileGroup'\r\n\r\n// Utilities\r\nimport stopEvent from '../../../utilities/stopEvent'\r\n\r\nconst BURN_PERMIT_PILE_GROUP_VALIDATION_SCHEMA = BurnPermitPileGroup.validationSchema\r\nconst DELETE_PILE_GROUP = 'DELETE_PILE_GROUP'\r\n\r\n\r\nclass BurnPermitPileGroupsSection extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n\r\n this.renderTableOrForm = this.renderTableOrForm.bind(this)\r\n this.validateSection = this.validateSection.bind(this)\r\n\r\n this.inputColumns = BurnPermitPileGroup.dataTableColumns({ input: true, })\r\n this.inputColumnDefs = [\r\n {\r\n targets : 0,\r\n createdCell : (td, cellData) =>\r\n ReactDOMRender(\r\n \r\n , td\r\n ),\r\n },\r\n ]\r\n }\r\n\r\n static propTypes = {\r\n title : string.isRequired,\r\n sectionId : number.isRequired,\r\n applicationStatus : string,\r\n ActiveBurnPermitPileGroup : object,\r\n DeleteLocalPileGroups : func,\r\n EditBurnPermitPileGroup : func,\r\n OpenModal : func,\r\n BurnPermitPileGroups : array,\r\n CalculatorResults : array,\r\n burnPermitId : number,\r\n GetBurnPileGroups : func,\r\n readOnly : bool,\r\n online : bool,\r\n RequestFailed : bool,\r\n PileBurnTypeIsChecked : bool,\r\n TonnageIsEstimated : bool,\r\n isValid : bool,\r\n needsPileGroups : bool,\r\n isActive : bool,\r\n isExemptArea : bool,\r\n }\r\n\r\n static defaultProps = {\r\n readOnly: false,\r\n }\r\n\r\n state = {\r\n pileGroupId : -1,\r\n pileGroupName : '',\r\n }\r\n\r\n componentDidMount () {\r\n const { burnPermitId, GetBurnPileGroups, online, isActive, } = this.props\r\n if (online && isActive) {\r\n GetBurnPileGroups(burnPermitId)\r\n }\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.EditBurnPermitPileGroup()\r\n this.props.DeleteLocalPileGroups()\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n // Don't fire off anything unless we're active\r\n if (!this.props.isActive) {\r\n return\r\n }\r\n\r\n if (prevProps.isActive !== true && this.props.isActive === true) {\r\n this.props.GetBurnPileGroups(this.props.burnPermitId)\r\n }\r\n }\r\n\r\n async validateSection () {\r\n const { BurnPermitPileGroups, isValid, PileBurnTypeIsChecked, isExemptArea, } = this.props\r\n if (PileBurnTypeIsChecked === false) {\r\n return true\r\n }\r\n if (BurnPermitPileGroups.length === 0 && !isExemptArea) {\r\n return false\r\n }\r\n\r\n try {\r\n if (isValid === false) {\r\n // If there are any errors, the validate method actually throws an exception so the errors are logged in the catch\r\n await Promise.all(BurnPermitPileGroups.map(g => BURN_PERMIT_PILE_GROUP_VALIDATION_SCHEMA.validate(g), []))\r\n }\r\n return isValid\r\n }\r\n catch (error) {\r\n console.dir(error)\r\n return false\r\n }\r\n }\r\n\r\n deletePileGroup = evt => {\r\n stopEvent(evt)\r\n const { pileGroupId, } = evt.target.dataset\r\n const { PileGroupName, } = this.props.BurnPermitPileGroups\r\n .find(g => g.BurnPermitPileGroupId.toString() === pileGroupId)\r\n this.setState({ pileGroupId, pileGroupName: PileGroupName, }, () => this.props.OpenModal(DELETE_PILE_GROUP))\r\n }\r\n\r\n renderTableOrForm = () => {\r\n let markup = []\r\n const {\r\n readOnly,\r\n ActiveBurnPermitPileGroup,\r\n BurnPermitPileGroups,\r\n CalculatorResults,\r\n } = this.props\r\n if (!readOnly && !isEmpty(ActiveBurnPermitPileGroup)) {\r\n const form = \r\n markup.push(form)\r\n }\r\n else {\r\n const {\r\n needsPileGroups,\r\n isExemptArea,\r\n burnPermitId,\r\n TonnageIsEstimated,\r\n } = this.props\r\n markup.push(\r\n
    \r\n {\r\n needsPileGroups && \r\n \r\n \r\n \r\n \r\n }\r\n {\r\n isExemptArea && \r\n \r\n \r\n \r\n \r\n }\r\n {\r\n !readOnly &&
    \r\n \r\n \r\n \r\n
    \r\n }\r\n \r\n \r\n
    \r\n )\r\n if (CalculatorResults.length) {\r\n let calcMarkup\r\n if (CalculatorResults.some(r => r.LegacyTonnage > 0) && this.props.applicationStatus !== 'Pending') {\r\n calcMarkup =
    \r\n \r\n
    \r\n }\r\n else {\r\n calcMarkup =
    \r\n \r\n
    \r\n }\r\n markup.push(calcMarkup)\r\n }\r\n }\r\n return markup\r\n }\r\n\r\n render () {\r\n return {this.props.BurnPermitPileGroups.length}}\r\n showControls={isEmpty(this.props.ActiveBurnPermitPileGroup)}\r\n validateSection={this.validateSection}\r\n >\r\n \r\n \r\n \r\n \r\n

    \r\n The Burn Portal uses the \r\n to calculate the tonnage of the forest material to be burned.\r\n

    \r\n \r\n \r\n \r\n \r\n
    \r\n {this.renderTableOrForm()}\r\n
    \r\n
    \r\n \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n const { burnPermitId, sectionId, } = props\r\n const pileGroupState = burnPermitPileGroupsByPermitIdSelector(state, burnPermitId)\r\n const isActive = permitSectionIsActive(state, sectionId)\r\n return {\r\n isActive,\r\n ...pileGroupState,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n GetBurnPileGroups : BurnPermitPileGroupActions.getBurnPileGroups,\r\n EditBurnPermitPileGroup : BurnPermitPileGroupActions.editBurnPermitPileGroup,\r\n DeleteLocalPileGroups : BurnPermitPileGroupActions.deleteLocalPileGroups,\r\n OpenModal : UiActions.openModal,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitPileGroupsSection)","import React from 'react'\n\n\nconst AgreementTerms = () => {\n const terms = <>\n

    \n Permit applicants are required to follow and obey all applicable provisions of Chapter 76.04 RCW (Forest\n Protection), Chapter 70.94 RCW (Washington Clean Air Act), Chapter 332-24 WAC (Forest Protection), and the\n Smoke Management Plan in effect at the time of burning.\n

    \n

    I certify that:

    \n
    \n
      \n
    • \n If granted a permit, I agree to comply with Chapter 76.04 RCW (Forest Protection), Chapter 70.94\n RCW (Washington Clean Air Act), Chapter 332-24 WAC (Forest Protection), the Smoke Management Plan in\n effect at the time of burning, and the conditions contained in the permit;\n
    • \n
    • \n The information provided is true and accurate to the best of my knowledge;\n
    • \n
    • \n I believe the proposed burning is reasonably necessary, and that no practical alternative exists;\n
    • \n
    • \n I grant the Department of Natural Resources (DNR), or its representative, access to all acreage listed on\n any burning permit application I submit or on any burning permit I am issued, including private roads\n or access ways under my control needed to access the listed acreage for the purpose of\n investigating conditions specific to the burning permit or application;\n
    • \n
    • \n If applying as the landowner's agent, I have landowner written approval to conduct the burning\n requested in this application.\n
    • \n
    \n
    \n

    \n To the extent reasonable and consistent with carrying out the duties of the Department of Natural\n Resources burning permitting program, you will be notified and given the option to accompany DNR,\n or its duly authorized representatives, when accessing your property.\n

    \n \n return terms\n}\n\nexport default React.memo(AgreementTerms)\n","// Libraries\nimport React from 'react'\nimport { useSelector, } from 'react-redux'\n\n// Components\nimport { PopoverButton, } from '../../FormControls'\n\n// Selectors\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\n\n\nconst OnlinePopover = () => {\n const online = useSelector(appIsOnlineSelector)\n if (!online) {\n return \n }\n return null\n}\n\nexport default React.memo(OnlinePopover)","import { createSelector, } from 'reselect'\r\nimport { propsSelector, } from './selectors'\r\n\r\n/*** State Selectors */\r\n\r\nconst instructionsState = state => state.BurnPermitInstructions || {}\r\n\r\nexport const instructionsSelector = createSelector(\r\n instructionsState,\r\n propsSelector,\r\n (instructions, burnPermitId) => {\r\n return {\r\n instructionStep : instructions.instructionStep || 'Apply',\r\n instructionsAcknowledged : instructions.instructionsAcknowledged || false,\r\n completedSteps : 'completedSteps' in instructions ? instructions.completedSteps[burnPermitId] || [] : [],\r\n }\r\n }\r\n)\r\n\r\nexport const currentInstructionStepSelector = createSelector(\r\n instructionsState,\r\n instructionsSelector,\r\n instructions => instructions.instructionStep\r\n)\r\n\r\nexport const userAcknowledgedInstructions = createSelector(\r\n instructionsState,\r\n instructionsSelector,\r\n instructions => instructions.instructionsAcknowledged\r\n)\r\n","// Libraries\nimport React from 'react'\nimport { useDispatch, } from 'react-redux'\nimport { func, array, string, } from 'prop-types'\nimport { Button, ButtonGroup, } from 'reactstrap'\n\n// Redux\nimport BurnPermitInstructionsActions from '../../redux/BurnPermitInstructionsRedux'\n\nconst StepsNav = (props) => {\n const dispatch = useDispatch()\n let dot\n const dots = []\n const { currentStep, steps, completedSteps, } = props\n for (let i = 0, len = steps.length; i < len; i++) {\n const { icon, label, readOnly , } = steps[i]\n if (readOnly === true) {\n dot = \n }\n else {\n const isActive = currentStep === label\n const isCompleted = completedSteps.includes(label)\n const buttonProps = {\n key : `step-${i}`,\n color : 'nav',\n className : `p-2 ${isActive ? ' active': ''}`,\n onClick : () => dispatch(BurnPermitInstructionsActions.goToInstructionStep(label)),\n }\n if (!isActive && isCompleted) {\n buttonProps.style = { color: 'green', }\n }\n dot = \n }\n dots.push(dot)\n }\n \n return {dots}\n}\n\n \nStepsNav.propTypes = {\n steps : array.isRequired,\n currentStep : string.isRequired,\n goToStep : func.isRequired,\n completedSteps : array,\n}\n\nStepsNav.defaultProps = {\n steps : [],\n currentStep : 'Apply',\n goToStep : () => {},\n}\n\nexport default StepsNav","import React from 'react'\nimport { Button, } from 'reactstrap'\n\nconst Apply = () => {\n return {\n label : 'Apply',\n caption : <>\n

    Complete each section, providing values for all required fields.

    \n

    Click to save the section and move to the next.

    \n

    Click to go to the previous section.

    \n

    Click the name of any section to jump to that section at any time.

    \n ,\n icon : 'fas fa-file-contract',\n color : 'primary',\n }\n}\n\nexport default Apply","import React from 'react'\n\nconst Approved = () => {\n return {\n label : 'Approved',\n caption : <>\n

    Your Permit Application is Approved!

    \n

    Soon DNR will being Issuing your Permit.

    \n ,\n icon: 'fas fa-thumbs-up',\n }\n}\n\nexport default Approved","import {\n Apply,\n Issued,\n Separator,\n Submit,\n} from './'\n \nconst AutoIssuedSteps = ({ mustSignPermit, isIssued, }) => {\n return [\n Apply(),\n Separator(),\n Submit({ mustSignPermit, }),\n Separator(),\n Issued({ isIssued, }),\n ]\n}\n \nexport default AutoIssuedSteps","import React from 'react'\n\nconst Denied = () => {\n return {\n label : 'Denied',\n caption : <>\n

    Your Permit Application is Denied .

    \n

    Contact DNR if you have questions or if you feel this was in error.

    \n ,\n icon: 'fas fa-thumbs-down',\n }\n}\n\nexport default Denied","import React from 'react'\r\nimport { bool, } from 'prop-types'\r\n\r\nconst Issued = ({ isIssued, }) => {\r\n let caption = <>\r\n

    If your Permit is Issued, you must sign the Permit in DocuSign in order for the Permit to be Issued.

    \r\n

    \r\n You can sign your Permit in the Signatures section of your Application, then click the Sign \r\n button in the Permit card to sign the Permit in DocuSign.\r\n

    \r\n \r\n if (isIssued) {\r\n caption =

    \r\n Now that your Permit is Issued, you can submit Burn Requests using the assigned Burn Permit Number\r\n

    \r\n }\r\n return {\r\n label : 'Issued',\r\n caption,\r\n icon : 'fas fa-burn',\r\n }\r\n}\r\n\r\nIssued.propTypes = {\r\n isIssued: bool,\r\n}\r\n\r\nexport default Issued","import {\r\n Apply,\r\n Denied,\r\n Issued,\r\n Review,\r\n Separator,\r\n Sign,\r\n} from '.'\r\n \r\nconst NoPaySteps = ({ paysByVoucher, isIssued, isDenied, }) => {\r\n return [\r\n Apply(),\r\n Separator(),\r\n Sign({ paysByVoucher, }),\r\n Separator(),\r\n Review(),\r\n Separator(),\r\n isDenied ? Denied() : Issued({ isIssued, }),\r\n ]\r\n}\r\n \r\nexport default NoPaySteps","import React from 'react'\nimport { string, } from 'prop-types'\n\nimport PopoverButton from './FormControls/PopoverButton'\nimport ExternalLink from './ExternalLink'\n\nfunction PermitFeePopover (props) {\n const { buttonClassName, placement, } = props\n return \n
  • The permit is based on the Total Permit Tonnage of all Permits included in the order.\n
  • \n
  • \n Note: An applicant submitting multiple applications within one DNR region may elect to pay one fee based on\n the combined tonnage of all applications when:\n
      \n
    • the combined tonnage of all applications equals or exceeds 100 tons, and
    • \n
    • applications are submitted and paid for as one order.
    • \n
    \n
  • \n \n }\n />\n}\n\nPermitFeePopover.defaultProps = {\n buttonClassName : 'py-2',\n placement : 'bottom',\n}\n\nPermitFeePopover.propTypes = {\n buttonClassName : string,\n placement : string,\n}\n\nexport default PermitFeePopover","// Libraries\nimport React from 'react'\nimport { Row, Col, Button, } from 'reactstrap'\nimport { useSelector, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\n\n// Selectors\nimport { userIsDNR, } from '../../../selectors/userSelectors'\n\n// Components\nimport PermitFeePopover from '../../PermitFeePopover'\n\nconst PayStep = () => {\n const isDnr = useSelector(userIsDNR)\n \n let readyToPay =

    \n Once you've reviewed your order, click the Pay Order button. You will be redirected to an external payment processor where you can\n pay by ACH or Credit Card.\n

    \n if (isDnr) {\n readyToPay =

    Once you've reviewed the order, enter the Cash or Check payment information then click Submit.

    \n }\n return \n \n

    Bundling Applications?

    \n
    \n

    \n If you are applying for multiple permits, you can bundle them together to combine the tonnages\n to take advantage of the Permit Fee Schedule.\n

    \n

    Click the Apply button below to begin another application.

    \n

    \n When you're ready to pay for your Permit Applications, go to My Permits, add your Permit Application(s) to your Cart by clicking the to Checkout.\n

    \n
    \n \n \n

    Ready to Pay?

    \n
    \n

    Click the Create Order button below. This will take you to your Order Details page so you can review your Burn Permit Order.

    \n {readyToPay}\n
    \n \n
    \n}\n\nconst Pay = () => {\n return {\n label : 'Pay',\n caption : ,\n icon : 'fas fa-credit-card',\n }\n}\n\nexport default Pay","import {\n Apply,\n Approved,\n Denied,\n Issued,\n Pay,\n Review,\n Separator,\n Sign,\n} from './'\n\nconst PrivateAndAgentAndDNRSteps = ({ isIssued, isDenied, isApproved, }) => {\n const steps = [\n Apply(),\n Separator(),\n Sign(),\n Separator(),\n Pay(),\n Separator(),\n Review(),\n ]\n if (isApproved) {\n steps.push(Separator())\n steps.push(Approved())\n }\n if (isDenied) {\n steps.push(Separator())\n steps.push(Denied())\n }\n if (isApproved || isIssued) {\n steps.push(Separator())\n steps.push(Issued({ isIssued, }))\n }\n return steps\n}\n\nexport default PrivateAndAgentAndDNRSteps","import React from 'react'\n\nconst Review = () => {\n return {\n label : 'Review',\n caption : <>\n

    \n A DNR representative will review your application to either approve or deny your application.\n They may reach out to you directly if they have questions about the information you submitted.\n

    \n

    \n Once the review is complete, your application will be Approved  \n or Denied \n

    \n ,\n icon: 'fas fa-tasks',\n }\n}\n\nexport default Review","const Separator = () => {\n return {\n icon : 'fas fa-arrow-circle-right mt-4',\n readOnly : true,\n }\n}\n\nexport default Separator","import React from 'react'\r\nimport { Button, } from 'reactstrap'\r\n\r\nconst Sign = props => {\r\n const { paysByVoucher, } = props || {}\r\n return {\r\n label : 'Sign',\r\n caption : <>\r\n

    \r\n Once all sections are completed with all required data, you must click the  \r\n button in the Signature section to sign your application in DocuSign.\r\n

    \r\n

    Once you've signed, you can download a copy of your signed Application at any time in the Signature section.

    \r\n

    Click the on the application to modify it after you've signed.

    \r\n {\r\n !paysByVoucher\r\n ? Once you pay, you cannot unlock your application. If you unlock your application, you will need to sign again.\r\n : Once your application signature is confirmed, it will be submitted to DNR for review.\r\n }\r\n \r\n ,\r\n icon : 'fas fa-file-signature',\r\n color : 'secondary',\r\n }\r\n}\r\n\r\nexport default Sign","import React from 'react'\r\nimport { Button, } from 'reactstrap'\r\nimport { bool, } from 'prop-types'\r\n\r\nconst Submit = ({ mustSignPermit, }) => {\r\n return {\r\n label : 'Submit',\r\n caption : <>\r\n

    \r\n Once you've completed all the sections, click the  \r\n button in the Signatures section to submit the application to DNR {mustSignPermit ? 'for review' : 'and have your Permit Issued'}.\r\n

    \r\n ,\r\n icon : 'fas fa-file-signature',\r\n color : 'secondary',\r\n }\r\n}\r\n\r\nSubmit.propTypes = {\r\n mustSignPermit: bool,\r\n}\r\n\r\nexport default Submit","import Instructions from './Instructions'\nexport default Instructions","// Libraries\r\nimport React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { useSelector, } from 'react-redux'\r\nimport { number, } from 'prop-types'\r\n\r\n// Selectors\r\nimport { permitIsIssued, permitIsDenied, permitIsApproved, activeBurnPermitIdSelector, } from '../../selectors/burnPermitSelectors'\r\nimport { userCanAutoSubmitPermit, userMustSignIssuedPermit, } from '../../selectors/burnPermitPermissionSelectors'\r\nimport { instructionsSelector, } from '../../selectors/instructionsSelectors'\r\n\r\n// Components\r\nimport StepsNav from './StepsNav'\r\nimport {\r\n PrivateAndAgentAndDNRSteps,\r\n NoPaySteps,\r\n AutoIssuedSteps,\r\n} from './Steps'\r\nimport { agencyAutoRegionApprovalByPermitId, agencyPaysByVoucherByPermitId, } from '../../selectors/agencySelectors'\r\n\r\n\r\nconst Instructions = props => {\r\n\r\n let { burnPermitId, } = props\r\n const activeBurnPermitId = useSelector(activeBurnPermitIdSelector)\r\n if (!burnPermitId) {\r\n burnPermitId = activeBurnPermitId\r\n }\r\n\r\n const { instructionStep, completedSteps, } = useSelector(state => instructionsSelector(state, burnPermitId))\r\n\r\n const canAutoSubmit = useSelector(userCanAutoSubmitPermit)\r\n const mustSignPermit = useSelector(userMustSignIssuedPermit)\r\n const autoIssue = useSelector(state => agencyAutoRegionApprovalByPermitId(state, burnPermitId))\r\n const paysByVoucher = useSelector(state => agencyPaysByVoucherByPermitId(state, burnPermitId))\r\n\r\n const isApproved = useSelector(permitIsApproved)\r\n const isIssued = useSelector(permitIsIssued)\r\n const isDenied = useSelector(permitIsDenied)\r\n let steps = []\r\n // Fallback to the configuration for the agent/agency of the application\r\n if (canAutoSubmit || paysByVoucher || autoIssue) {\r\n // Auto Submit applicants do not pay up front, they pay by voucher later\r\n // and some of their Permits are auto-issued\r\n if ((mustSignPermit || paysByVoucher) && !autoIssue) {\r\n steps = NoPaySteps({ paysByVoucher, isIssued, isDenied, })\r\n }\r\n else {\r\n steps = AutoIssuedSteps({ mustSignPermit, isIssued, })\r\n }\r\n }\r\n else {\r\n steps = PrivateAndAgentAndDNRSteps({ isIssued, isDenied, isApproved, })\r\n }\r\n const appSteps = \r\n const { caption, } = steps.find(s => s.label === instructionStep) || {}\r\n const help =

    \r\n If you need additional help, check out the Help \r\n page or contact your local DNR Region Office\r\n

    \r\n const markup = <>\r\n
    {appSteps}
    \r\n
    {caption}
    \r\n
    {help}
    \r\n \r\n return markup\r\n}\r\n\r\nInstructions.propTypes = {\r\n currentStep : number,\r\n burnPermitId : number,\r\n}\r\n\r\nexport default Instructions\r\n","import React from 'react'\r\nimport {\r\n Button,\r\n Modal,\r\n ModalHeader,\r\n ModalBody,\r\n ModalFooter,\r\n} from 'reactstrap'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Navigate, useNavigate, } from 'react-router-dom'\r\nimport { object, bool, } from 'prop-types'\r\n\r\n// Redux\r\nimport BurnPermitOrderActions from '../../redux/BurnPermitOrderRedux'\r\nimport UiActions from '../../redux/UiRedux'\r\n\r\n// Components\r\nimport Instructions from '../Instructions'\r\nimport CloseModalButton from './CloseModalButton'\r\n\r\n// Selectors\r\nimport { isModalOpen, } from '../../selectors/uiSelectors'\r\nimport { instructionsSelector, } from '../../selectors/instructionsSelectors'\r\nimport { activeBurnPermitIdSelector, } from '../../selectors/burnPermitSelectors'\r\nimport { newBurnPermitOrderId, orderIdForActivePermitSelector, } from '../../selectors/orderSelectors'\r\n\r\n\r\nconst modalkey = 'APPLICATION_NEXT_STEPS'\r\n\r\nconst ApplicationNextSteps = props => {\r\n const dispatch = useDispatch()\r\n\r\n const burnPermitId = useSelector(activeBurnPermitIdSelector)\r\n const { instructionStep, completedSteps, } = useSelector(instructionsSelector)\r\n const newPermitOrderId = useSelector(newBurnPermitOrderId)\r\n const orderId = useSelector(orderIdForActivePermitSelector)\r\n\r\n const isOpen = useSelector(state => isModalOpen(state, modalkey))\r\n\r\n const navigate = useNavigate()\r\n const { shouldOpen, } = props\r\n\r\n // These hooks must be declared/rendered regardless of which step\r\n // is set to render\r\n const onClick = React.useCallback(() => {\r\n dispatch(UiActions.closeModal())\r\n if (orderId) {\r\n navigate(`/permits/orders/${orderId}`)\r\n }\r\n else {\r\n dispatch(BurnPermitOrderActions.createBurnPermitOrder([ burnPermitId, ]))\r\n }\r\n }, [ dispatch, orderId, navigate, burnPermitId, ])\r\n\r\n const newPermit = React.useCallback(() => {\r\n dispatch(UiActions.closeModal())\r\n navigate('/permits/new')\r\n }, [ dispatch, navigate, ])\r\n \r\n const closeModal = React.useCallback(() => dispatch(UiActions.closeModal()), [ dispatch, ])\r\n\r\n if (!isOpen && shouldOpen) {\r\n dispatch(UiActions.openModal(modalkey))\r\n }\r\n \r\n if (newPermitOrderId) {\r\n return \r\n }\r\n\r\n let title, body, actionButton = \r\n\r\n if (instructionStep === 'Apply') {\r\n title = 'Complete your Application'\r\n }\r\n else if (instructionStep === 'Sign') {\r\n title = 'Sign your Application'\r\n }\r\n else if (instructionStep === 'Pay') {\r\n title = 'Pay for your Application'\r\n if (completedSteps.includes(instructionStep)) {\r\n body = <>Now that you've signed your application, you must pay the Application Fee.\r\n }\r\n\r\n actionButton = <>\r\n \r\n Apply\r\n \r\n \r\n {orderId ? 'View' : 'Create'} Order\r\n \r\n \r\n }\r\n else if (instructionStep === 'Review') {\r\n title = 'Application Review'\r\n }\r\n else if (instructionStep === 'Approved') {\r\n title = 'Sign your Permit'\r\n }\r\n else if (instructionStep === 'Denied') {\r\n title = 'Apply Again or Contact DNR'\r\n }\r\n else if (instructionStep === 'Issued') {\r\n title = 'Create a Burn Request'\r\n }\r\n\r\n return \r\n Next Step: {title}\r\n \r\n

    {body}

    \r\n \r\n
    \r\n \r\n {actionButton}\r\n \r\n \r\n}\r\n\r\nApplicationNextSteps.defaultProps = {\r\n shouldOpen : false,\r\n history : {},\r\n location : {},\r\n}\r\n\r\nApplicationNextSteps.propTypes = {\r\n shouldOpen : bool,\r\n history : object,\r\n location : object,\r\n}\r\n\r\n\r\nexport default ApplicationNextSteps","// Libraries\nimport React from 'react'\nimport { Button, } from 'reactstrap'\nimport { string, func, array, bool, } from 'prop-types'\n\n// Components\nimport ConfirmationModal from '../ConfirmationModal'\nimport { PopoverButton, } from '../FormControls'\n\nconst CopyApplication = props => {\n const { openModal, modalKey, online, submitAction, submitArgs, } = props\n return <>\n \n \n Copy\n \n {\n !online\n ? \n : null\n }\n \n Are you sure you wish to start a new Burn Permit Application from a copy of this one?\n

    }\n submitAction={submitAction}\n submitArgs={submitArgs}\n />\n \n}\n\nCopyApplication.propTypes = {\n openModal : func,\n modalKey : string,\n submitArgs : array,\n submitAction : func,\n online : bool,\n}\n\nexport default CopyApplication","// Libraries\nimport React from 'react'\nimport { Button, } from 'reactstrap'\nimport { string, func, array, } from 'prop-types'\n\n// Components\nimport ConfirmationModal from '../ConfirmationModal'\n\nconst DeleteApplication = props => {\n const { openModal, modalKey, submitAction, submitArgs, } = props\n return <>\n \n \n Delete\n \n \n

    Are you sure you wish to delete this Burn Permit Application?

    \n

    This action is permanent and irreversible.

    \n }\n submitAction={submitAction}\n submitArgs={submitArgs}\n />\n \n}\n\nDeleteApplication.propTypes = {\n openModal : func,\n modalKey : string,\n submitArgs : array,\n submitAction : func,\n}\n\nexport default DeleteApplication","import React from 'react'\r\nimport { useSelector, useDispatch, } from 'react-redux'\r\nimport { Col, Row, } from 'reactstrap'\r\nimport { Link, } from 'react-router-dom'\r\nimport { number, } from 'prop-types'\r\n\r\n// Actions\r\nimport BurnPermitSignatureActions from '../../redux/BurnPermitSignatureRedux'\r\n\r\n// Selectors\r\nimport { permitSignatureState, } from '../../selectors/burnPermitSignatureSelectors'\r\n\r\n// Components\r\nimport ConfirmationModal from '../ConfirmationModal'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n\r\nconst ForcePermitApplicationSignature = (props) => {\r\n \r\n const { BurnPermitId, } = props\r\n\r\n // Selectors\r\n const {\r\n abandonedPermitApplicationId,\r\n } = useSelector(permitSignatureState)\r\n\r\n // Redux actions\r\n const dispatch = useDispatch()\r\n\r\n // UI Callbacks\r\n const forceSignApp = React.useCallback(e => {\r\n stopEvent(e)\r\n dispatch(BurnPermitSignatureActions.signPermitApplication(BurnPermitId, true))\r\n }, [ dispatch, BurnPermitId, ])\r\n\r\n const markup = \r\n

    \r\n The system determined you initiated a signing ceremony for Permit Application #{abandonedPermitApplicationId},\r\n but never finished.\r\n

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

    \r\n Click the Cancel button below to cancel signing Permit Application #{BurnPermitId} and finish signing \r\n \r\n Permit Application #{abandonedPermitApplicationId}\r\n \r\n

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

    \r\n Click the Confirm button below to sign Permit Application #{BurnPermitId} and cancel the signing of \r\n \r\n Permit Application #{abandonedPermitApplicationId}\r\n \r\n

    \r\n \r\n
    \r\n \r\n }\r\n submitAction={forceSignApp}\r\n submitActionLabel={'Confirm'}\r\n />\r\n return markup\r\n}\r\n\r\nForcePermitApplicationSignature.defaultProps = {\r\n BurnPermitId: '',\r\n}\r\n\r\nForcePermitApplicationSignature.propTypes = {\r\n BurnPermitId: number,\r\n}\r\n\r\nexport default React.memo(ForcePermitApplicationSignature)","import React from 'react'\r\nimport { object, } from 'prop-types'\r\nimport {\r\n Button,\r\n Modal,\r\n ModalHeader,\r\n ModalBody,\r\n ModalFooter,\r\n} from 'reactstrap'\r\nimport { Link, } from 'react-router-dom'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\n\r\n// Redux\r\nimport UiActions from '../../redux/UiRedux'\r\nimport BurnPermitSignatureActions from '../../redux/BurnPermitSignatureRedux'\r\n\r\n// Selectors\r\nimport { isModalOpen, } from '../../selectors/uiSelectors'\r\nimport { activeBurnPermitIdSelector, permitIsExtended, } from '../../selectors/burnPermitSelectors'\r\n\r\n\r\nconst PermitNextSteps = () => {\r\n\r\n const permitId = useSelector(activeBurnPermitIdSelector)\r\n const isOpen = useSelector(state => isModalOpen(state, 'PERMIT_NEXT_STEPS'))\r\n const isExtended = useSelector(state => permitIsExtended(state, permitId))\r\n\r\n const dispatch = useDispatch()\r\n\r\n const signPermit = React.useCallback(() =>\r\n dispatch(BurnPermitSignatureActions.signPermit(permitId))\r\n , [ permitId, dispatch, ])\r\n return \r\n dispatch(UiActions.closeModal())}>\r\n Next Steps: Sign your Permit\r\n \r\n \r\n

    Your Permit is being { isExtended ? 'Extended': 'Issued' }!

    \r\n

    \r\n Once you review any conditions set for your permit and sign your Permit in \r\n DocuSign you can submit Burn Requests and burn with this permit!\r\n

    \r\n
    \r\n \r\n \r\n Review Permit Conditions\r\n \r\n \r\n Sign Permit Now\r\n \r\n \r\n
    \r\n}\r\n\r\nPermitNextSteps.propTypes = {\r\n history : object,\r\n location : object,\r\n}\r\n\r\nexport default PermitNextSteps","import React from 'react'\nimport { Alert, } from 'reactstrap'\nimport { isEmpty, } from 'lodash'\nimport { useSelector, } from 'react-redux'\n\n// Selectors\nimport { conditionValuesNewForBurnPermitSelector, } from '../../selectors/conditionsSelectors'\n\n\nconst ConditionsWarning = () => {\n\n const permitConditionValues = useSelector(conditionValuesNewForBurnPermitSelector)\n const hasConditionsSet = !isEmpty(permitConditionValues)\n\n if (hasConditionsSet) {\n return null\n }\n return \n No conditions have been set for this Permit.\n \n}\n\nexport default ConditionsWarning","// Libraries\nimport React, { useCallback, useMemo, useState, } from 'react'\nimport { Alert, Button, Col, Input, Label, Row, } from 'reactstrap'\nimport { useDispatch, } from 'react-redux'\nimport { bool, } from 'prop-types'\n\n// Components\nimport ConditionsWarning from './ConditionsWarning'\n\n// Actions\nimport BurnPermitSignatureActions, { SignatureProcessTypes, } from '../../redux/BurnPermitSignatureRedux'\n\n// Utilities\nimport stopEvent from '../../utilities/stopEvent'\n\n\nconst DocuSignSteps = props => {\n const {\n isPreviewing,\n isIssuing,\n isReissuing,\n } = props\n\n // State\n const [ doNotShow, setDoNotShow, ] = useState(false)\n const [ stepIdx, setStepIdx, ] = useState(0)\n\n // Redux actions\n const dispatch = useDispatch()\n\n // UI Callbacks\n\n const processType = useMemo(() => {\n if (isIssuing) {\n return {\n type : SignatureProcessTypes.issue,\n btnText : 'Issue Permit',\n }\n }\n else if (isReissuing) {\n return {\n type : SignatureProcessTypes.reissue,\n btnText : 'Reissue Permit',\n }\n }\n else if (isPreviewing) {\n return {\n type : SignatureProcessTypes.preview,\n btnText : 'Preview Permit',\n }\n }\n return {\n type : SignatureProcessTypes.application,\n btnText : 'sign',\n }\n }, [ isPreviewing, isIssuing, isReissuing, ])\n\n const doNotShowCheck = useCallback(() => {\n setDoNotShow(!doNotShow)\n }, [ doNotShow, ])\n\n const acknowledge = useCallback(e => {\n stopEvent(e)\n dispatch(BurnPermitSignatureActions.acknowledgeSignatureSteps(processType.type, true, doNotShow))\n }, [ dispatch, doNotShow, processType, ])\n\n const prevClick = useCallback(e => {\n stopEvent(e)\n setStepIdx(stepIdx - 1)\n }, [ setStepIdx, stepIdx, ])\n\n const nextClick = useCallback(e => {\n stopEvent(e)\n setStepIdx(stepIdx + 1)\n }, [ setStepIdx, stepIdx, ])\n\n let eSignatureSteps = useMemo(() => {\n if (isPreviewing) {\n return [\n \n

    Burn Portal

    \n
    \n
    \n

    Please read the brief description of the Preview Permit process.

    \n

    Once you have read all the steps, you read them and initiate the Burn Permit document preview process.

    \n

    If you wish to Issue the Burn Permit, use the button to generate the Burn Permit document and electronically sign it.

    \n

    Click the button below to begin the Preview Permit process in DocuSign.

    \n
    \n ,\n \n

    DocuSign

    \n
    \n
    \n

    In DocuSign, review the document to ensure the information is correct.

    \n

    Click the FINISH button to have DocuSign send you back to the Burn Portal.

    \n
    \n ,\n \n

    Burn Portal

    \n
    \n
    \n

    Once you are back in the Burn Portal, correct any correctable information (i.e., Contacts, Conditions) and use the process to review the information again if desired.

    \n

    If you are ready to Issue the Burn Permit and generate a document to electronically sign, set the Valid Date and Valid Duration then click the button.

    \n
    \n ,\n ]\n }\n let steps = [\n \n

    Burn Portal

    \n
    \n
    \n

    Please read the brief description of the e-signature process.

    \n

    Once you have read all the steps, you read them to revewal the button.

    \n

    Click the button to begin the e-signature process in DocuSign.

    \n
    \n ,\n \n

    DocuSign

    \n
    \n
    \n

    In DocuSign, review the document to ensure the information is correct.

    \n

    If there are any discrepancies, click the Actions drop down then choose Finish later to be sent back to the Burn Portal.

    \n

    When you are ready to sign, click the Sign button to provide your e-signature.

    \n

    Click the FINISH button to submit your e-signature and wait for DocuSign to send you back to the Burn Portal.

    \n
    \n ,\n \n

    Burn Portal

    \n
    \n
    \n

    Once you are back in the Burn Portal, please wait for the system to confirm your signature information with DocuSign.

    \n

    After your signature is confirmed, you can continue using the Burn Portal for your remaining tasks.

    \n
    \n ,\n ]\n if (isIssuing) {\n const issueStep = \n

    Burn Portal

    \n
    \n
    \n

    Only initiate the Issue Permit process once you are confident all information on the Permit Application is correct and you are ready to generate and electronically sign the Burn Permit.

    \n \n You cannot undo your signature once you have signed it and any modifications to the Burn Permit will require the Burn Permit to be revoked and a new Permit Application created.\n \n

    If you wish to review the information that will be written on to the Burn Permit document, use the button to review the information in DocuSign without creating a final Burn Permit.

    \n
    \n \n steps.splice(1, 0, issueStep)\n }\n return steps\n }, [ isPreviewing, isIssuing, processType, ])\n\n const atLastStep = useMemo(() => stepIdx === eSignatureSteps.length - 1, [ stepIdx, eSignatureSteps, ])\n\n let pageControls = <>\n \n \n Previous\n \n \n \n \n Next \n \n \n \n\n let acknowledgeControls = <>\n if (atLastStep) {\n acknowledgeControls = <>\n \n \n I acknowledge\n \n \n }\n\n const conditions = useMemo(() => {\n if (isPreviewing || isIssuing || isReissuing) {\n return \n }\n return null\n }, [ isPreviewing, isIssuing, isReissuing, ])\n\n return <>\n \n {eSignatureSteps[stepIdx]}\n \n \n {conditions}\n \n \n {acknowledgeControls}\n \n \n {pageControls}\n \n \n}\n\n\nDocuSignSteps.propTypes = {\n isPreviewing : bool,\n isIssuing : bool,\n isReissuing : bool,\n}\n\nexport default React.memo(DocuSignSteps)\n","// Libraries\nimport React, { useEffect, useMemo, } from 'react'\nimport {\n Modal,\n ModalBody,\n ModalHeader,\n ModalFooter,\n Button,\n} from 'reactstrap'\nimport { func, bool, string, element, arrayOf, oneOfType, } from 'prop-types'\nimport { useDispatch, useSelector, } from 'react-redux'\n\n// Components\nimport CloseModalButton from './CloseModalButton'\nimport DocuSignSteps from './DocuSignSteps'\n\n// Redux\nimport BurnPermitSignatureActions, { SignatureProcessTypes, } from '../../redux/BurnPermitSignatureRedux'\nimport UiActions from '../../redux/UiRedux'\n\n// Selectors\nimport { isModalOpen, } from '../../selectors/uiSelectors'\nimport { appIsOnlineSelector, } from '../../selectors/selectors'\nimport { permitSignatureState, } from '../../selectors/burnPermitSignatureSelectors'\n\n\nconst DocuSignModal = props => {\n const {\n onClick,\n modalHeader,\n children,\n className,\n buttonText,\n signatureType,\n disabled,\n disableModalLaunchBtn,\n } = props\n\n const modalKey = `DOCUSIGN_MODAL_${modalHeader.replace(/ /g, '_').toUpperCase()}`\n\n // Selectors\n const isOpen = useSelector(state => isModalOpen(state, modalKey))\n\n const online = useSelector(appIsOnlineSelector)\n const {\n doNotShowSteps,\n acknowledgedSteps,\n isLoadingDocuSignUrl,\n } = useSelector(permitSignatureState)\n\n const isPreviewing = useMemo(() => (signatureType === SignatureProcessTypes.preview), [ signatureType, ])\n const isIssuing = useMemo(() => (signatureType === SignatureProcessTypes.issue), [ signatureType, ])\n const isReissuing = useMemo(() => (signatureType === SignatureProcessTypes.reissue), [ signatureType, ])\n\n const docusignScenario = SignatureProcessTypes[signatureType]\n\n const acknowledgedProcessSteps = acknowledgedSteps[docusignScenario]\n\n // Redux actions\n const dispatch = useDispatch()\n\n const openModal = React.useCallback(() => {\n let showModal = true\n if (doNotShowSteps[docusignScenario] && !isLoadingDocuSignUrl && typeof onClick === 'function') {\n showModal = onClick()\n }\n if (showModal) {\n dispatch(UiActions.openModal(modalKey))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ dispatch, modalKey, onClick, ])\n\n let closeModal = React.useCallback(() => {\n dispatch(UiActions.closeModal())\n }, [ dispatch, ])\n\n useEffect(() => {\n if (disabled) {\n dispatch(UiActions.closeModal())\n }\n }, [ dispatch, disabled, ])\n\n useEffect(() => {\n dispatch(BurnPermitSignatureActions.loadingDocuSignUrl(false))\n dispatch(BurnPermitSignatureActions.acknowledgeSignatureSteps(SignatureProcessTypes[docusignScenario], false))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // If the user has already acknowledged the steps\n // call the onClick callback to begin the redirection\n useEffect(() => {\n dispatch(BurnPermitSignatureActions.acknowledgeSignatureSteps(SignatureProcessTypes[docusignScenario], false))\n if (isOpen && doNotShowSteps[docusignScenario] && !isLoadingDocuSignUrl && typeof onClick === 'function') {\n onClick()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ isOpen, ])\n\n const btnColor = useMemo(() => {\n if (isPreviewing) {\n return 'light'\n }\n return 'primary'\n }, [ isPreviewing, ])\n\n let content = children || \n\n let footer = \n \n \n {buttonText}\n \n \n\n if (acknowledgedProcessSteps !== true || !onClick) {\n footer = <>\n }\n\n if (isLoadingDocuSignUrl) {\n content =

    Please wait while we redirect you to DocuSign. This may take a few seconds.

    \n footer = <>\n closeModal = null\n }\n\n return <>\n { disableModalLaunchBtn !== true &&\n \n {buttonText}\n \n }\n \n \n {modalHeader || buttonText}\n \n \n {content}\n \n {footer}\n \n \n}\n\nDocuSignModal.defaultProps = {\n onClick : () => {},\n isPreviewing : false,\n isIssuing : false,\n isReissuing : false,\n disabled : false,\n disableModalLaunchBtn : false,\n}\n\nDocuSignModal.propTypes = {\n onClick : func,\n modalHeader : string,\n buttonText : string,\n children : oneOfType([ element, arrayOf(element), string, ]),\n signatureType : string,\n isPreviewing : bool,\n isIssuing : bool,\n isReissuing : bool,\n disabled : bool,\n disableModalLaunchBtn : bool,\n className : string,\n}\n\nexport default React.memo(DocuSignModal)\n","// Libraries\nimport React, { useCallback, useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { useFormikContext, } from 'formik'\nimport { bool, number, string, object, func, oneOfType, } from 'prop-types'\n\n// Components\nimport DocuSignModal from './DocuSignModal'\n\n// Redux\nimport BurnPermitSignatureActions, { SignatureProcessTypes, } from '../../redux/BurnPermitSignatureRedux'\n\n// Selectors\nimport { activeBurnPermitIdSelector, permitDates, } from '../../selectors/burnPermitSelectors'\n\n// Utilities\nimport { dateFormatter, } from '../../utilities'\n\n\nconst IssuePermit = props => {\n const {\n disabled,\n className,\n onClick,\n } = props\n let {\n ValidDate,\n ExpirationDate,\n } = props\n\n const dispatch = useDispatch()\n\n const BurnPermitId = useSelector(activeBurnPermitIdSelector)\n const burnPermitDates = useSelector((state) => permitDates(state, BurnPermitId))\n\n if (!ValidDate || !ExpirationDate) {\n ({ ValidDate, ExpirationDate, } = burnPermitDates)\n }\n ValidDate = dateFormatter(ValidDate)\n ExpirationDate = dateFormatter(ExpirationDate)\n\n const datesMissing = useMemo(() => (!ValidDate || !ExpirationDate), [ ValidDate, ExpirationDate, ])\n\n const formikContext = useFormikContext()\n\n let onClickArgs\n if (formikContext && Object.keys(formikContext).length) {\n onClickArgs = formikContext\n }\n\n let issuePermit = useCallback(() => {\n if (typeof onClick === 'function') {\n return onClick(onClickArgs)\n }\n dispatch(BurnPermitSignatureActions.signPermit(BurnPermitId, ValidDate, ExpirationDate))\n }, [ dispatch, onClick, BurnPermitId, ValidDate, ExpirationDate, onClickArgs, ])\n\n let content = null\n if (!disabled && datesMissing && !onClick) {\n content = <>\n

    You must set the Valid Date and Expiration Date in the Application Summary section.

    \n
    \n Application Summary\n
    \n \n issuePermit = null\n }\n\n return \n {content}\n \n}\n\nIssuePermit.defaultProps = {\n className : '',\n disabled : false,\n}\n\nIssuePermit.propTypes = {\n burnPermitId : number,\n className : string,\n onClick : func,\n disabled : bool,\n ValidDate : oneOfType([ object, string, ]),\n ExpirationDate : oneOfType([ object, string, ]),\n}\n\nexport default IssuePermit\n","// Libraries\nimport React from 'react'\nimport { number, string, } from 'prop-types'\nimport { useDispatch, } from 'react-redux'\n\n// Components\nimport DocuSignModal from './DocuSignModal'\n\n// Redux\nimport BurnPermitSignatureActions, { SignatureProcessTypes, } from '../../redux/BurnPermitSignatureRedux'\n\n\nconst ReIssuePermit = props => {\n const {\n burnPermitId,\n className,\n } = props\n\n const dispatch = useDispatch()\n\n const reissuePermit = React.useCallback(() => {\n dispatch(BurnPermitSignatureActions.reIssuePermit(burnPermitId))\n }, [ dispatch, burnPermitId, ])\n\n return \n}\n\nReIssuePermit.defaultProps = {\n burnPermitId : '',\n className : '',\n}\n\nReIssuePermit.propTypes = {\n burnPermitId : number,\n className : string,\n}\n\nexport default ReIssuePermit","// Libraries\nimport React from 'react'\nimport { number, string, } from 'prop-types'\nimport { useDispatch, } from 'react-redux'\n\n// Components\nimport DocuSignModal from './DocuSignModal'\n\n// Redux\nimport BurnPermitSignatureActions, { SignatureProcessTypes, } from '../../redux/BurnPermitSignatureRedux'\n\n\nconst PreviewPermit = props => {\n const { burnPermitId, className, } = props\n\n const dispatch = useDispatch()\n\n const previewPermit = React.useCallback(() => {\n dispatch(BurnPermitSignatureActions.previewPermit(burnPermitId))\n }, [ dispatch, burnPermitId, ])\n\n return \n}\n\nPreviewPermit.defaultProps = {\n className: '',\n}\n\nPreviewPermit.propTypes = {\n burnPermitId : number,\n className : string,\n}\n\nexport default PreviewPermit\n","import React, { useCallback, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { number, } from 'prop-types'\n\n// Components\nimport DocuSignModal from './DocuSignModal'\n\n// Actions\nimport BurnPermitSignatureActions, { SignatureProcessTypes, } from '../../redux/BurnPermitSignatureRedux'\n\n// Selectors\nimport { userIsDNR, } from '../../selectors/userSelectors'\n\n\nconst SignApplication = props => {\n const { burnPermitId, } = props\n\n const userIsDnr = useSelector(userIsDNR)\n\n // Redux actions\n const dispatch = useDispatch()\n\n // UI Callbacks\n const onClick = useCallback(() => {\n dispatch(BurnPermitSignatureActions.signPermitApplication(burnPermitId))\n }, [ dispatch, burnPermitId, ])\n\n if (userIsDnr) {\n return null\n }\n\n return \n}\n\nSignApplication.defaultProps = {\n burnPermitId: null,\n}\n\nSignApplication.propTypes = {\n burnPermitId: number,\n}\n\nexport default React.memo(SignApplication)\n","import React from 'react'\nimport { Alert, } from 'reactstrap'\n\n\nconst AutoApproval = () => {\n const alert = \n

    \n No signature required. Click Submit below when you have completed the \n application and you have uploaded a document outlining the Burn Reason.\n

    \n \n return alert\n}\n\nexport default React.memo(AutoApproval)\n","import React from 'react'\nimport { Alert, } from 'reactstrap'\n\n\nconst BurnReasonDoc = () => {\n const alert = \n

    Make sure you have uploaded a document outlining the Burn Reason.

    \n

    \n Click Sign below when you have completed the \n application to electronically sign it and submit it to DNR for review.\n

    \n \n return alert\n}\n\nexport default React.memo(BurnReasonDoc)\n","import { useCallback, } from 'react'\n\n// Actions\nimport BurnPermitFormActions from '../redux/BurnPermitFormRedux'\n\nconst useDownloadPermitFile = (dispatch, burnPermitId, fileInfo) => {\n return useCallback(() => {\n const {\n fileName,\n documentId,\n } = fileInfo\n dispatch(BurnPermitFormActions.downloadPermitFile(burnPermitId, fileName, documentId))\n }, [ dispatch, burnPermitId, fileInfo, ])\n}\n\nexport default useDownloadPermitFile\n","// Libraries\nimport React, { useCallback, useEffect, useState, } from 'react'\nimport { useSelector, useDispatch, } from 'react-redux'\nimport { Button, } from 'reactstrap'\nimport { number, } from 'prop-types'\n\n// Hooks\nimport useDownloadPermitFile from '../../../hooks/useDownloadPermitFile'\n\n// Selectors\nimport { permitSignatureState, } from '../../../selectors/burnPermitSignatureSelectors'\nimport { applicationSignatureDocuments, } from '../../../selectors/burnPermitSelectors'\n\n// Utilities\nimport stopEvent from '../../../utilities/stopEvent'\n\n\nconst DownloadApplicationLinks = props => {\n const { burnPermitId, } = props\n // State and refs\n const [ fileInfo, setFileInfo, ] = useState(null)\n\n // Selectors\n const { isGettingSignatures, } = useSelector(permitSignatureState)\n const [ app, cert, ] = useSelector(state => applicationSignatureDocuments(state, burnPermitId))\n\n // Redux actions\n const dispatch = useDispatch()\n\n // UI Callbacks\n const downloadDoc = useDownloadPermitFile(dispatch, burnPermitId, fileInfo)\n\n const downloadApp = useCallback(e => {\n stopEvent(e)\n setFileInfo({ fileName: app.DocumentName, documentId: app.BurnPermitDocumentId, })\n }, [ app, ])\n\n const downloadCert = useCallback(e => {\n stopEvent(e)\n setFileInfo({ fileName: cert.DocumentName, documentId: cert.BurnPermitDocumentId, })\n }, [ cert, ])\n\n useEffect(() => {\n if (fileInfo) {\n downloadDoc()\n setFileInfo(null)\n }\n }, [ downloadDoc, fileInfo, setFileInfo, ])\n\n if (burnPermitId < 0) {\n return 'Did not receive a `burnPermitId`, cannot build links.'\n }\n\n if (isGettingSignatures) {\n return

    Getting signatures...

    \n }\n\n let markup = []\n if (app) {\n markup.push(\n \n Application\n \n )\n }\n if (cert) {\n markup.push(\n \n Certificate\n \n )\n }\n return markup\n}\n\nDownloadApplicationLinks.defaultProps = {\n burnPermitId: null,\n}\n\nDownloadApplicationLinks.propTypes = {\n burnPermitId: number,\n}\n\nexport default React.memo(DownloadApplicationLinks)\n","// Libraries\nimport React from 'react'\nimport { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\nimport { Card, CardBody, CardHeader, CardText, } from 'reactstrap'\n\n// Components\nimport OnlinePopover from '../OnlinePopover'\nimport DownloadApplicationLinks from '../../Buttons/DownloadApplicationLinks'\n\n// Selectors\nimport {\n activeBurnPermitIdSelector,\n permitApplicationSignedByDnr,\n} from '../../../../selectors/burnPermitSelectors'\nimport { signatureByPermitId, } from '../../../../selectors/burnPermitSignatureSelectors'\n\n// Utilities\nimport { dateFormatter, } from '../../../../utilities'\n\n\nconst ApplicationSignature = () => {\n\n // Selectors\n const burnPermitId = useSelector(activeBurnPermitIdSelector)\n const {\n ApplicationSignedBy,\n ApplicationSignedDate,\n ApplicationEnvelopeId,\n CreateBy,\n CreateDate,\n } = useSelector(state => signatureByPermitId(state, burnPermitId))\n const signedByDnr = useSelector(state => permitApplicationSignedByDnr(state, burnPermitId))\n\n const download = useMemo(() => {\n if (ApplicationEnvelopeId !== '[AUTO-APPROVED]') {\n return <>\n \n \n \n }\n return

    No signature or download available.

    \n }, [ ApplicationEnvelopeId, burnPermitId, ])\n\n const signedBy = useMemo(() => {\n if (signedByDnr) {\n return Submitted by DNR employee\n }\n return 'Applicant'\n }, [ signedByDnr, ])\n\n const markup = \n Application\n \n \n {signedBy}
    \n Signed By: {ApplicationSignedBy || CreateBy}
    \n Signed On: {dateFormatter(ApplicationSignedDate || CreateDate, 'dddd, MMMM D YYYY, h:mm:ss a')}\n
    \n {download}\n
    \n
    \n return markup\n}\n\nexport default React.memo(ApplicationSignature)\n","// Libraries\nimport React from 'react'\nimport { useCallback, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { Button, } from 'reactstrap'\n\n// Actions\nimport BurnPermitSignatureActions from '../../../../redux/BurnPermitSignatureRedux'\n\n// Components\nimport OnlinePopover from '../OnlinePopover'\n\n// Selectors\nimport {\n activeBurnPermitIdSelector,\n documentsSectionIsValid,\n} from '../../../../selectors/burnPermitSelectors'\nimport { permitSignatureState, signatureByPermitId, } from '../../../../selectors/burnPermitSignatureSelectors'\nimport { appIsOnlineSelector, } from '../../../../selectors/selectors'\n\n// Utilities\nimport stopEvent from '../../../../utilities/stopEvent'\n\n\nconst SignPermit = () => {\n\n const online = useSelector(appIsOnlineSelector)\n const burnPermitId = useSelector(activeBurnPermitIdSelector)\n const documentsSection = useSelector(state => documentsSectionIsValid(state, burnPermitId))\n const { PermitEnvelopeId, } = useSelector(state => signatureByPermitId(state, burnPermitId))\n const { isLoadingDocuSignUrl, } = useSelector(permitSignatureState)\n\n const dispatch = useDispatch()\n\n const onSignPermitClick = useCallback(e => {\n stopEvent(e)\n\n if (isLoadingDocuSignUrl) {\n return\n }\n\n dispatch(BurnPermitSignatureActions.signPermit(burnPermitId))\n }, [ dispatch, burnPermitId, isLoadingDocuSignUrl, ])\n\n if (!PermitEnvelopeId) {\n return

    Waiting for the Approver to sign.

    \n }\n const markup = <>\n \n Sign\n \n \n \n return markup\n}\n\n\nexport default React.memo(SignPermit)\n","// Libraries\nimport React from 'react'\nimport { useSelector, } from 'react-redux'\nimport { CardText, } from 'reactstrap'\n\n// Selectors\nimport { activeBurnPermitIdSelector, permitApplicationSignedByDnr, } from '../../../../selectors/burnPermitSelectors'\nimport { signatureByPermitId, } from '../../../../selectors/burnPermitSignatureSelectors'\n\n// Utilities\nimport { dateFormatter, } from '../../../../utilities'\n\n\nconst ApplicantSignature = () => {\n\n // Selectors\n const burnPermitId = useSelector(activeBurnPermitIdSelector)\n const {\n PermitApplicantSignedBy,\n PermitApplicantSignedDate,\n } = useSelector(state => signatureByPermitId(state, burnPermitId))\n\n const signedByDnr = useSelector(state => permitApplicationSignedByDnr(state, burnPermitId))\n // const applicantCanSign = useSelector(applica)\n\n if (signedByDnr) {\n return Application submitted by DNR, no applicant signature required.\n }\n\n const markup = \n Applicant
    \n Signed By: {PermitApplicantSignedBy}
    \n Signed On: {dateFormatter(PermitApplicantSignedDate, 'dddd, MMMM D YYYY, h:mm:ss a')}\n
    \n return markup\n}\n\n\nexport default React.memo(ApplicantSignature)\n","// Libraries\nimport React from 'react'\nimport { useSelector, } from 'react-redux'\nimport { CardText, } from 'reactstrap'\n\n// Selectors\nimport { activeBurnPermitIdSelector, } from '../../../../selectors/burnPermitSelectors'\nimport { signatureByPermitId, } from '../../../../selectors/burnPermitSignatureSelectors'\n\n// Utilities\nimport { dateFormatter, } from '../../../../utilities'\n\n\nconst ApproverSignature = () => {\n\n // Selectors\n const burnPermitId = useSelector(activeBurnPermitIdSelector)\n const {\n PermitApproverSignedBy,\n PermitApproverSignedDate,\n } = useSelector(state => signatureByPermitId(state, burnPermitId))\n\n const markup = \n DNR
    \n Signed By: {PermitApproverSignedBy}
    \n Signed On: {dateFormatter(PermitApproverSignedDate, 'dddd, MMMM D YYYY, h:mm:ss a')}\n
    \n return markup\n}\n\n\nexport default React.memo(ApproverSignature)\n","// Libraries\nimport React, { useCallback, useEffect, useState, } from 'react'\nimport { useSelector, useDispatch, } from 'react-redux'\nimport { Button, } from 'reactstrap'\nimport { number, } from 'prop-types'\n\n// Hooks\nimport useDownloadPermitFile from '../../../hooks/useDownloadPermitFile'\n\n// Selectors\nimport { permitSignatureState, } from '../../../selectors/burnPermitSignatureSelectors'\nimport { permitSignatureDocuments, } from '../../../selectors/burnPermitSelectors'\n\n// Utilities\nimport stopEvent from '../../../utilities/stopEvent'\n\n\nconst DownloadPermitLinks = props => {\n const { burnPermitId, } = props\n // State and refs\n const [ fileInfo, setFileInfo, ] = useState(null)\n\n // Selectors\n const { isGettingSignatures, } = useSelector(permitSignatureState)\n const [ permit, cert, ] = useSelector(state => permitSignatureDocuments(state, burnPermitId))\n\n // Redux actions\n const dispatch = useDispatch()\n\n // UI Callbacks\n const downloadDoc = useDownloadPermitFile(dispatch, burnPermitId, fileInfo)\n\n const downloadPermit = useCallback(e => {\n stopEvent(e)\n setFileInfo({ fileName: permit.DocumentName, documentId: permit.BurnPermitDocumentId, })\n }, [ permit, ])\n\n const downloadCert = useCallback(e => {\n stopEvent(e)\n setFileInfo({ fileName: cert.DocumentName, documentId: cert.BurnPermitDocumentId, })\n }, [ cert, ])\n\n useEffect(() => {\n if (fileInfo) {\n downloadDoc()\n setFileInfo(null)\n }\n }, [ downloadDoc, fileInfo, setFileInfo, ])\n\n if (burnPermitId < 0) {\n return 'Did not receive a `burnPermitId`, cannot build links.'\n }\n\n if (isGettingSignatures) {\n return

    Getting signatures...

    \n }\n\n let markup = []\n if (permit) {\n markup.push(\n \n Permit\n \n )\n }\n if (cert) {\n markup.push(\n \n Certificate\n \n )\n }\n return markup\n}\n\nDownloadPermitLinks.defaultProps = {\n burnPermitId: null,\n}\n\nDownloadPermitLinks.propTypes = {\n burnPermitId: number,\n}\n\nexport default React.memo(DownloadPermitLinks)\n","// Libraries\nimport React from 'react'\nimport { useSelector, } from 'react-redux'\nimport { Card, CardBody, CardHeader, } from 'reactstrap'\nimport { bool, } from 'prop-types'\n\n// Selectors\nimport {\n activeBurnPermitIdSelector,\n permitHasSignedPermitDoc,\n} from '../../../../selectors/burnPermitSelectors'\nimport {\n userMustSignPermitToSubmit,\n} from '../../../../selectors/burnPermitPermissionSelectors'\nimport { signatureByPermitId, } from '../../../../selectors/burnPermitSignatureSelectors'\nimport {\n agencyAutoRegionApprovalByPermitId,\n agencyPaysByVoucherByPermitId,\n} from '../../../../selectors/agencySelectors'\nimport { userIsDNR, } from '../../../../selectors/userSelectors'\n\n// Components\nimport SignPermit from '../Buttons/SignPermit'\nimport ApplicantSignature from '../Permit/ApplicantSignature'\nimport ApproverSignature from '../Permit/ApproverSignature'\nimport DownloadPermitLinks from '../../Buttons/DownloadPermitLinks'\n\n\nconst PermitSignature = () => {\n // Selectors\n const burnPermitId = useSelector(activeBurnPermitIdSelector)\n const {\n PermitEnvelopeId,\n PermitApproverSignedBy,\n } = useSelector(state => signatureByPermitId(state, burnPermitId))\n\n const userIsDnr = useSelector(userIsDNR)\n const paysByVoucher = useSelector(state => agencyPaysByVoucherByPermitId(state, burnPermitId))\n const autoRegionApproval = useSelector(state => agencyAutoRegionApprovalByPermitId(state, burnPermitId))\n\n const needsApproverSignature = !PermitApproverSignedBy\n\n const mustSignPermit = useSelector(userMustSignPermitToSubmit)\n const hasSignedPermit = useSelector(state => permitHasSignedPermitDoc(state, burnPermitId))\n // We don't need to show the Sign button if the Permit is issued and signed.\n // One way to determine if the Permit is fully Issued and Signed is to\n // check to see if the signed docs are downloaded (this.props.hasSignedPermit).\n // These docs do not get downloaded by the API unless the requisite signatures have\n // been made, so once we have those, we don't need to also check the signatures, envelopeId, etc.\n // This covers all user signing scenarios, including when issuing a Permit\n // to a non-user Agent of an Agency where other Agents of that Agency are\n // users and need to make Burn Requests on the permit issued to a non-user Agent\n const needsApplicantSignature = mustSignPermit && hasSignedPermit !== true\n\n const isAutoApproved = (paysByVoucher || autoRegionApproval) && PermitEnvelopeId === '[AUTO-APPROVED]'\n\n let markup = []\n if (needsApproverSignature) {\n if (userIsDnr) {\n markup.push(

    Issue Permit in the Application Summary area.

    )\n }\n else {\n markup.push(

    Waiting for the Approver to sign.

    )\n }\n }\n else {\n markup.push()\n if (isAutoApproved) {\n markup.push(

    Permit was automatically approved and issued, permit downloads are unavailable.

    )\n }\n else if (needsApplicantSignature) {\n markup.push()\n }\n else if (!hasSignedPermit) {\n markup.push(

    Waiting for the Applicant to sign.

    )\n }\n else {\n markup.push()\n markup.push()\n }\n }\n\n return \n Permit\n \n {markup}\n \n \n}\n\nPermitSignature.defaultProps = {\n autoRegionApproval : false,\n paysByVoucher : false,\n}\n\nPermitSignature.propTypes = {\n autoRegionApproval : bool,\n paysByVoucher : bool,\n}\n\nexport default React.memo(PermitSignature)\n","import { useCallback, } from 'react'\n\n// Actions\nimport BurnPermitFormActions from '../redux/BurnPermitFormRedux'\nimport UiActions from '../redux/UiRedux'\n\nconst usePermitFileUpload = (dispatch, burnPermitId, mustUploadPermit, isGovPermit, files) => {\n return useCallback(() => {\n dispatch(BurnPermitFormActions.uploadPermitFiles(burnPermitId, files, true))\n if (mustUploadPermit && isGovPermit) {\n dispatch(UiActions.closeModal())\n }\n }, [ dispatch, burnPermitId, mustUploadPermit, isGovPermit, files, ])\n}\n\nexport default usePermitFileUpload","// Libraries\nimport React, { useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { array, } from 'prop-types'\n\n// Components\nimport ConfirmationModal from '../../../ConfirmationModal'\n\n// Selectors\nimport { agencyAutoRegionApprovalByPermitId, } from '../../../../selectors/agencySelectors'\nimport { activeBurnPermitIdSelector, } from '../../../../selectors/burnPermitSelectors'\nimport { userMustUploadPermitToSubmit, } from '../../../../selectors/burnPermitPermissionSelectors'\nimport { isGovAgentPermit, } from '../../../../selectors/burnPermitSelectors'\nimport usePermitFileUpload from '../../../../hooks/usePermitFileUpload'\n\n\nconst UploadPermitWarning = props => {\n\n const { files, } = props\n\n // Selectors\n const burnPermitId = useSelector(activeBurnPermitIdSelector)\n const isGovPermit = useSelector(isGovAgentPermit)\n const mustUploadPermit = useSelector(userMustUploadPermitToSubmit)\n const autoRegionApproval = useSelector(state => agencyAutoRegionApprovalByPermitId(state, burnPermitId))\n\n // Redux actions\n const dispatch = useDispatch()\n\n const doUpload = usePermitFileUpload(dispatch, burnPermitId, mustUploadPermit, isGovPermit, files)\n\n const modalBody = useMemo(() => {\n return <>\n

    \n This permit lists an Agency configured to have their applications auto-approved and permits auto-issued.\n

    \n

    \n Are you sure you want to upload this document now? If you confirm now, the scanned\n application will be uploaded and the Permit will be Issued.\n

    \n \n }, [])\n\n const renderModal = mustUploadPermit && autoRegionApproval\n if (!renderModal) {\n return null\n }\n return \n}\n\nUploadPermitWarning.defaultProps = {\n files: [],\n}\n\nUploadPermitWarning.propTypes = {\n files: array,\n}\n\nexport default React.memo(UploadPermitWarning)","// Libraries\nimport React, { useCallback, useEffect, useState, } from 'react'\nimport { useSelector, useDispatch, } from 'react-redux'\nimport { Row, Col, Card, CardBody, } from 'reactstrap'\nimport { number, bool, string, } from 'prop-types'\n\n// Reducers\nimport BurnPermitSignatureActions from '../../../redux/BurnPermitSignatureRedux'\nimport BurnPermitFormActions from '../../../redux/BurnPermitFormRedux'\nimport UiActions from '../../../redux/UiRedux'\n\n// Components\nimport AgreementTerms from './AgreementTerms'\nimport OnlinePopover from './OnlinePopover'\nimport BurnPermitFormSection from '../FormSection'\nimport Upload from '../../Upload'\nimport {\n ForestHealthDocAlert,\n PileLocationDocAlert,\n TonnageCalculationDocAlert,\n} from '../../Alerts'\nimport { SignApplication, ForcePermitApplicationSignature, } from '../../Modals'\nimport { AutoApproval, BurnReasonDoc, } from './Alerts'\nimport { ApplicationSignature, PermitSignature, } from './Cards'\nimport { UploadPermitWarning, } from './Modals'\n\n// Selectors\nimport {\n userMustSignPermitToSubmit,\n userMustUploadPermitToSubmit,\n} from '../../../selectors/burnPermitPermissionSelectors'\nimport {\n isGovAgentPermit,\n permitHasSignedPermitDoc,\n permitApplicationIsSigned,\n documentsSectionIsValid,\n permitByIdIsSubmitted,\n permitIsIssued,\n} from '../../../selectors/burnPermitSelectors'\nimport { agencyAutoRegionApprovalByPermitId, agencyPaysByVoucherByPermitId, } from '../../../selectors/agencySelectors'\nimport { isLoadingDocuSignUrl, } from '../../../selectors/burnPermitSignatureSelectors'\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\n\n// Hooks\nimport usePermitFileUpload from '../../../hooks/usePermitFileUpload'\n\n// Utilities\nimport stopEvent from '../../../utilities/stopEvent'\n\n\nconst Signatures = props => {\n\n const {\n burnPermitId,\n readOnly,\n } = props\n\n // State and refs\n const [ files, setFiles, ] = useState([])\n\n // Selectors\n const online = useSelector(appIsOnlineSelector)\n const isLoading = useSelector(isLoadingDocuSignUrl)\n const documentsSection = useSelector(state => documentsSectionIsValid(state, burnPermitId))\n\n // User permission selectors\n const mustUploadPermit = useSelector(userMustUploadPermitToSubmit)\n const mustSignPermit = useSelector(userMustSignPermitToSubmit)\n const hasSignedPermit = useSelector(state => permitHasSignedPermitDoc(state, burnPermitId))\n\n // Permit Flag selectors\n const isGovPermit = useSelector(isGovAgentPermit)\n const paysByVoucher = useSelector(state => agencyPaysByVoucherByPermitId(state, burnPermitId))\n const autoRegionApproval = useSelector(state => agencyAutoRegionApprovalByPermitId(state, burnPermitId))\n\n // Permit Status selectors\n const applicationIsSigned = useSelector(state => permitApplicationIsSigned(state, burnPermitId))\n const isIssued = useSelector(state => permitIsIssued(state, burnPermitId))\n const isSubmitted = useSelector(state => permitByIdIsSubmitted(state, burnPermitId))\n\n let {\n hideContinue,\n } = props\n if (!hideContinue) {\n if (isLoading) {\n hideContinue = true\n }\n if (applicationIsSigned) {\n hideContinue = true\n }\n if (isSubmitted) {\n hideContinue = true\n }\n if (!autoRegionApproval && mustUploadPermit) {\n hideContinue = true\n }\n }\n\n // Redux actions\n const dispatch = useDispatch()\n\n // UI Callbacks\n\n const onSignClick = useCallback(e => {\n stopEvent(e)\n\n if (isLoading) {\n return\n }\n\n if (autoRegionApproval && online) {\n dispatch(BurnPermitFormActions.agencySubmitBurnPermit(burnPermitId))\n }\n else {\n dispatch(UiActions.openModal('DOCUSIGN_MODAL_SIGN_BURN_PERMIT_APPLICATION'))\n }\n }, [ dispatch, online, isLoading, burnPermitId, autoRegionApproval, ])\n\n const uploadFiles = useCallback(files => {\n setFiles(files)\n }, [])\n\n const doUpload = usePermitFileUpload(dispatch, burnPermitId, mustUploadPermit, isGovPermit, files)\n\n useEffect(() => {\n if (files.length) {\n if (mustUploadPermit && isGovPermit) {\n // open a modal\n dispatch(UiActions.openModal('CONFIRM_FILE_UPLOAD_SIDE_EFFECTS'))\n } else {\n doUpload()\n }\n }\n }, [ dispatch, files, doUpload, mustUploadPermit, isGovPermit, ])\n\n // mount effect\n useEffect(() => {\n dispatch(BurnPermitSignatureActions.loadingDocuSignUrl(false))\n }, [ dispatch, ])\n\n\n // Markup\n const hasSignature = applicationIsSigned || hasSignedPermit\n\n let markup = []\n\n if (!documentsSection.isValid) {\n if (documentsSection.needsForestDoc) {\n markup.push()\n }\n if (documentsSection.needsPileLocDoc) {\n markup.push()\n }\n if (documentsSection.needsTonnageDocs) {\n markup.push()\n }\n }\n else {\n\n if (!isIssued && !hasSignature && autoRegionApproval) {\n markup.push(\n \n \n \n )\n }\n else if (!mustUploadPermit && paysByVoucher && !isSubmitted && !isIssued) {\n markup.push(\n \n \n \n )\n }\n else if (hasSignature) {\n markup.push(\n \n \n \n )\n if (isIssued) {\n const signPermit = \n \n \n markup.push(signPermit)\n }\n }\n else if (mustUploadPermit && !isSubmitted) {\n markup.push(

    You must upload a scanned copy of the applicant's signed Permit Application in order to proceed.

    )\n markup.push(\n \n \n \n )\n }\n }\n\n let preContinueControl = null\n if (!hasSignature && !readOnly && !isLoadingDocuSignUrl && mustSignPermit) {\n preContinueControl = \n }\n\n return \n \n \n \n \n { markup }\n \n \n \n \n \n \n \n}\n\nSignatures.defaultProps = {\n burnPermitId : -1,\n hideContinue : false,\n readOnly : false,\n title : 'Signature',\n}\n\nSignatures.propTypes = {\n burnPermitId : number,\n hideContinue : bool,\n readOnly : bool,\n title : string,\n}\n\nexport default React.memo(Signatures)\n","import { dateFormatter, } from '../utilities'\r\nimport { ormSelector, ormByIdSelector, ormWithPropSelector, propsSelector, } from './selectors'\r\n\r\n\r\nexport const referenceDirectionTypesSelector = ormSelector(\r\n ({ ReferenceDirectionType, }) => {\r\n return ReferenceDirectionType.all().toRefArray()\r\n }\r\n)\r\n\r\nexport const distancesSelectSelector = ormSelector(\r\n ({ Distance, }) => {\r\n return Distance.all().toModelArray().map((d) => {\r\n return {\r\n Value : d.DistanceId,\r\n Text : d.DistanceName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const directionsSelectSelector = ormSelector(\r\n ({ Direction, }) => {\r\n return Direction.all().toModelArray().map((d) => {\r\n return {\r\n Value : d.DirectionId,\r\n Text : d.DirectionName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const burnReasonSelectSelector = ormSelector(\r\n ({ BurnReason, }) => {\r\n return BurnReason.all().toModelArray().map((b) => {\r\n return {\r\n Value : b.BurnReasonId,\r\n Text : `${b.BurnReasonName} (${b.BurnReasonCode})`,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const burnUnitSelector = ormSelector(\r\n ({ BurnPermitUnit, }) => {\r\n return BurnPermitUnit.all().toModelArray().map((u) => {\r\n return {\r\n Value : u.BurnPermitUnitName,\r\n Text : u.BurnPermitUnitName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const forestTypesSelectSelector = ormSelector(\r\n ({ ForestType, }) => {\r\n return ForestType.all().orderBy(b => [ b.ForestTypeLocationName, b.ForestTypeName, ]).toModelArray().map((b) => {\r\n return {\r\n Value : b.ForestTypeId,\r\n Text : b.ForestTypeName,\r\n Group : b.ForestTypeLocationName,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const arrivalTimeForSelectSelector = ormSelector(\r\n ({ ArrivalTime, }) => {\r\n return ArrivalTime.all().toRefArray().map(a => {\r\n return { 'Value': a.ArrivalTimeId, 'Text': a.ArrivalTimeName, }\r\n })\r\n }\r\n)\r\n\r\nexport const equipmentTypeCheckboxSelector = ormWithPropSelector(\r\n propsSelector,\r\n (session, { category, useDesc, }) => {\r\n let models = session.EquipmentType.all().toModelArray()\r\n if (category) {\r\n models = models.filter(e => e.EquipmentTypeCategoryName === category || !e.EquipmentTypeCategoryName)\r\n }\r\n return models.map((e) => {\r\n return {\r\n Value : e.EquipmentTypeId,\r\n Text : useDesc !== true ? e.EquipmentTypeName : e.EquipmentTypeDescription,\r\n }\r\n })\r\n }\r\n)\r\n\r\nexport const burnPermitSiteByIdSelector = ormByIdSelector(\r\n ({ BurnPermitSite, }, SiteId) => {\r\n if (isNaN(SiteId)) {\r\n return null\r\n }\r\n const site = BurnPermitSite.withId(SiteId)\r\n if (!site) {\r\n return null\r\n }\r\n\r\n const mappedSite = {\r\n BurnPermitSiteId: site.BurnPermitSiteId,\r\n\r\n BurnUnitName : site.BurnUnitName || '',\r\n NumberPeopleOnsite : site.NumberPeopleOnsite || '',\r\n HarvestDate : site.HarvestDate ? dateFormatter(site.HarvestDate, 'YYYY-MM-DD') : '',\r\n SnowOffDate : site.SnowOffDate ? dateFormatter(site.SnowOffDate, 'YYYY-MM-DD') : '',\r\n BarkBeetleOutbreakPreventionFlag : site.BarkBeetleOutbreakPreventionFlag || '',\r\n WaitForWetConditionsFlag : site.WaitForWetConditionsFlag || '',\r\n ForestTypeId : site.ForestTypeId || '',\r\n BurnReasonId : site.BurnReasonId || '',\r\n ForestPracticePermitNumber : site.ForestPracticePermitNumber || '',\r\n ClosedSeasonBurn : typeof site.ClosedSeasonBurn === 'boolean' ? site.ClosedSeasonBurn : '',\r\n PlannedBurnDays : site.DaysOfWeek.toRefArray().map(d => d.DayOfWeekId) || [],\r\n NumberOfHandPilesToBurnAtOnce : site.NumberOfHandPilesToBurnAtOnce || '',\r\n NumberOfMachinePilesToBurnAtOnce : site.NumberOfMachinePilesToBurnAtOnce || '',\r\n\r\n CreateBy : site.CreateBy,\r\n CreateDate : site.CreateDate,\r\n UpdateBy : site.UpdateBy,\r\n UpdateDate : site.UpdateDate,\r\n }\r\n return mappedSite\r\n }\r\n)\r\n\r\nexport const burnPermitReferenceDirectionsSelector = ormByIdSelector(\r\n ({ BurnPermitSite, ReferenceDirection, }, SiteId) => {\r\n if (isNaN(SiteId)) {\r\n return []\r\n }\r\n const site = BurnPermitSite.withId(SiteId)\r\n if (!site || !site.BurnPermitReferenceDirectionXref) {\r\n return []\r\n }\r\n const siteRefDirs = site.BurnPermitReferenceDirectionXref.toRefArray().map(d => d.ReferenceDirectionId)\r\n const refDirs = ReferenceDirection.filter(rd => siteRefDirs.includes(rd.ReferenceDirectionId)).toRefArray()\r\n return refDirs\r\n }\r\n)\r\n\r\nconst baseSiteEquip = \r\n{\r\n BurnPermitSiteEquipmentXrefId : '',\r\n BurnPermitSiteId : '',\r\n EquipmentTypeIds : [],\r\n OnsiteFlag : false,\r\n OffsiteFlag : false,\r\n FireLineConstructionFlag : false,\r\n ExtinguishingFlag : false,\r\n OffsiteEquipmentArrivalTime : '',\r\n NumberOfGallons : '',\r\n OtherEquipmentDescription : '',\r\n HasEquipAnswer : '',\r\n}\r\n\r\nconst siteEquipCombos = () => {\r\n const combos = []\r\n for (let i = 0, len = 4; i < len; i++) {\r\n combos.push({\r\n ...baseSiteEquip,\r\n // Makes sure the first pair of questions are FireLine\r\n FireLineConstructionFlag : i < 2,\r\n // The second pair are Extinguish\r\n ExtinguishingFlag : i > 1,\r\n // This makes sure that each question appears in the order\r\n // of onsite then offsite\r\n OnsiteFlag : (i % 2) !== 1,\r\n OffsiteFlag : (i % 2) === 1,\r\n })\r\n }\r\n return combos\r\n}\r\n\r\nexport const burnPermitSiteEquipmentSelector = ormByIdSelector(\r\n ({ BurnPermitSite, BurnPermitSiteEquipmentXref, ArrivalTime, }, SiteId) => {\r\n if (isNaN(SiteId)) {\r\n return []\r\n }\r\n const site = BurnPermitSite.withId(SiteId)\r\n if (!site) {\r\n return []\r\n }\r\n\r\n // Set up the default objects to be used for rendering the forms\r\n const siteEquips = [ ...siteEquipCombos(), ]\r\n \r\n // Get the permit site equipment\r\n const permitSiteEquip = BurnPermitSiteEquipmentXref.filter({ BurnPermitSiteId: SiteId, }).toRefArray()\r\n\r\n const mappedEquips = []\r\n // If there are, loop the default objects and match up\r\n // the permit site equipment object\r\n siteEquips.forEach(e => {\r\n let mappedValues = {\r\n ...e,\r\n // Default it to No since they have successfully saved the section already\r\n HasEquipAnswer: site.UpdateDate ? false : '',\r\n } // start with a copy of the default object\r\n const equips = permitSiteEquip.filter(p => {\r\n return (\r\n (\r\n p.FireLineConstructionFlag === e.FireLineConstructionFlag\r\n || p.ExtinguishingFlag === e.ExtinguishingFlag\r\n )\r\n && (\r\n p.OnsiteFlag === e.OnsiteFlag\r\n || p.OffsiteFlag === e.OffsiteFlag\r\n )\r\n )\r\n })\r\n if (equips.length) {\r\n mappedValues = { ...mappedValues, ...equips[0], }\r\n mappedValues.OnsiteFlag = typeof mappedValues.OnsiteFlag === 'boolean' ? mappedValues.OnsiteFlag : false\r\n mappedValues.OffsiteFlag = typeof mappedValues.OffsiteFlag === 'boolean' ? mappedValues.OffsiteFlag : false\r\n mappedValues.ExtinguishingFlag = typeof mappedValues.ExtinguishingFlag === 'boolean' ? mappedValues.ExtinguishingFlag : false\r\n mappedValues.FireLineConstructionFlag = typeof mappedValues.FireLineConstructionFlag === 'boolean' ? mappedValues.FireLineConstructionFlag : false\r\n const offsiteArrivalTimeQuery = ArrivalTime.filter({ ArrivalTimeName: mappedValues.OffsiteEquipmentArrivalTime, })\r\n if (mappedValues.OffsiteEquipmentArrivalTime && offsiteArrivalTimeQuery.exists()) {\r\n const offsiteArrivalTime = offsiteArrivalTimeQuery.first()\r\n mappedValues.OffsiteEquipmentArrivalTime = offsiteArrivalTime ? offsiteArrivalTime.ArrivalTimeId : ''\r\n }\r\n else {\r\n mappedValues.OffsiteEquipmentArrivalTime = ''\r\n }\r\n mappedValues.OtherEquipmentDescription = equips.map(e => e.OtherEquipmentDescription).filter(d => !!d)[0] || ''\r\n mappedValues.EquipmentTypeIds = equips.map(e => e.EquipmentTypeId)\r\n mappedValues.HasEquipAnswer = mappedValues.EquipmentTypeIds.filter(e => e !== null).length > 0\r\n }\r\n mappedEquips.push(mappedValues)\r\n })\r\n \r\n return mappedEquips\r\n }\r\n)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Formik, Field, } from 'formik'\r\nimport { Row, Col, FormGroup, Label, Fade, } from 'reactstrap'\r\nimport { bool, array, func, } from 'prop-types'\r\nimport { isEmpty, } from 'lodash'\r\n\r\n// Components\r\nimport {\r\n CheckBoxes,\r\n Select,\r\n ValidatingField,\r\n YesNoRadioButtonGroup,\r\n} from './'\r\nimport Effect from '../Effect'\r\n\r\n// Selectors\r\nimport {\r\n arrivalTimeForSelectSelector,\r\n burnPermitSiteEquipmentSelector,\r\n equipmentTypeCheckboxSelector,\r\n} from '../../selectors/burnPermitSiteSelectors'\r\n\r\n// Utilities\r\nimport { removeItemFromArray, addItemToArray, } from '../../utilities'\r\n\r\n// Models\r\nimport BurnPermitSiteEquipmentXref from '../../models/BurnPermitSiteEquipmentXref'\r\n\r\n// CONSTANTS\r\nconst FIRE_LINE_CONSTRUCTION = 'Fire Line Construction'\r\nconst EXTINGUISHING = 'Extinguishing'\r\n\r\nclass BurnPermitSiteEquipment extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n \r\n this.submit = this.submit.bind(this)\r\n this.validateForms = this.validateForms.bind(this)\r\n this.formiks = []\r\n }\r\n\r\n static propTypes = {\r\n readOnly : bool,\r\n ArrivalTime : array,\r\n ExtinguishEquipmentType : array,\r\n FireLineEquipmentType : array,\r\n siteEquipment : array,\r\n isValidating : bool,\r\n onChange : func,\r\n }\r\n\r\n rowClasses = 'mb-3'\r\n\r\n componentDidUpdate (prevProps) {\r\n if (prevProps.isValidating === false && this.props.isValidating) {\r\n this.validateForms()\r\n }\r\n }\r\n\r\n async validateForms () {\r\n const validForms = await Promise.all([\r\n ...this.formiks\r\n .filter(f => !!f)\r\n .map(async f => {\r\n const errors = await f.validateForm()\r\n return isEmpty(errors)\r\n }, []), \r\n ])\r\n return validForms.every(v => v)\r\n }\r\n\r\n submit () {\r\n // Transform the values to be an array of the objects\r\n // that flattens the EquipmentTypeId onto the object\r\n let siteEquip = []\r\n const forms = this.formiks.filter(f => !!f)\r\n for (let i = 0, len = forms.length; i < len; i++) {\r\n const { values, } = forms[i]\r\n if (values[`ShowEquipment_${values.FormIndex}`] && values) {\r\n if (values.OffsiteEquipmentArrivalTime) {\r\n const arrivalTime = this.props.ArrivalTime\r\n .find(a => a.Value.toString() === values.OffsiteEquipmentArrivalTime.toString())\r\n values.OffsiteEquipmentArrivalTime = arrivalTime\r\n ? arrivalTime.Text\r\n : values.OffsiteEquipmentArrivalTime\r\n }\r\n const mappedValues = values.EquipmentTypeIds.filter(i => !!i)\r\n .map(e => {\r\n return { \r\n ...values,\r\n EquipmentTypeId: e,\r\n }\r\n })\r\n\r\n siteEquip.push(...mappedValues)\r\n }\r\n }\r\n siteEquip = siteEquip.flat()\r\n return siteEquip\r\n }\r\n\r\n isOtherEquipType = id => {\r\n const {\r\n FireLineEquipmentType,\r\n ExtinguishEquipmentType,\r\n } = this.props\r\n return [ ...ExtinguishEquipmentType, FireLineEquipmentType, ].some(e =>\r\n e.Value === id\r\n && e.Text === 'Other'\r\n )\r\n }\r\n\r\n setFormik = node => {\r\n if (node) {\r\n this.formiks.splice(node.values.FormIndex, 1, node)\r\n }\r\n }\r\n\r\n labels = [\r\n <>Do you have equipment on site capable of fire line construction or for assistance in extinguishing burning/smoldering piles?,\r\n <>Do you have equipment off site capable of fire line construction or for assistance in extinguishing burning/smoldering piles?,\r\n <>Do you have water available on site to extinguish burning/smoldering piles?,\r\n <>Do you have water available off site to extinguish burning/smoldering piles?,\r\n ]\r\n\r\n render () {\r\n const {\r\n readOnly,\r\n onChange,\r\n siteEquipment,\r\n FireLineEquipmentType,\r\n ExtinguishEquipmentType,\r\n } = this.props\r\n const markup = siteEquipment.map((s, idx) => {\r\n return \r\n {({ values, errors, }) => (\r\n <>\r\n {\r\n typeof onChange === 'function'\r\n ? \r\n : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n {({ field, ...formProps }) => (\r\n {\r\n const { name, value, } = evt.target\r\n formProps.form.setFieldValue(name, value === 'yes')\r\n }}\r\n inputName={field.name}\r\n checkedValue={field.value}\r\n readOnly={readOnly}\r\n errorMessage={errors[field.name]}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, ...formProps }) => (\r\n {\r\n const { name, value, checked, } = evt.target\r\n const intValue = parseInt(value)\r\n let currValues = [ ...formProps.form.values[name], ]\r\n if (checked) {\r\n currValues = addItemToArray(currValues, intValue)\r\n }\r\n else {\r\n currValues = removeItemFromArray(currValues, intValue)\r\n }\r\n formProps.form.setValues({\r\n ...formProps.form.values,\r\n [name] : currValues,\r\n [`ShowOther_${idx}`] : currValues.some(this.isOtherEquipType),\r\n })\r\n }}\r\n CheckboxLabel={`${values.OnsiteFlag ? 'On' : 'Off'} site equipment`}\r\n CheckboxData={\r\n values.FireLineConstructionFlag\r\n ? FireLineEquipmentType\r\n : values.OnsiteFlag\r\n ? ExtinguishEquipmentType.filter(e => ![ 'Trailer', 'Water Truck', ].includes(e.Text) || e.Text === 'Other')\r\n : ExtinguishEquipmentType.filter(e => [ 'Trailer', 'Water Truck', ].includes(e.Text) || e.Text === 'Other')\r\n }\r\n CheckedData={field.value}\r\n OtherInputName={'OtherEquipmentDescription'}\r\n readOnly={readOnly}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n })\r\n return markup\r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n ArrivalTime : arrivalTimeForSelectSelector(state),\r\n FireLineEquipmentType : equipmentTypeCheckboxSelector(state, { category: FIRE_LINE_CONSTRUCTION, }),\r\n ExtinguishEquipmentType : equipmentTypeCheckboxSelector(state, { category: EXTINGUISHING, useDesc: true, }),\r\n siteEquipment : burnPermitSiteEquipmentSelector(state, props.burnPermitSiteId),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, null, null, { forwardRef: true, })(BurnPermitSiteEquipment)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { isEmpty, } from 'lodash'\r\nimport { Formik, Field, } from 'formik'\r\nimport { Col, Row, FormGroup, Label, Fade, } from 'reactstrap'\r\nimport { bool, array, func, } from 'prop-types'\r\n\r\n// Components\r\nimport Select from './Select'\r\nimport Effect from '../Effect'\r\n\r\n// Models\r\nimport BurnPermitReferenceDirectionXref from '../../models/BurnPermitReferenceDirectionXref'\r\n\r\n// Selectors\r\nimport {\r\n referenceDirectionTypesSelector,\r\n distancesSelectSelector,\r\n directionsSelectSelector,\r\n burnPermitReferenceDirectionsSelector,\r\n} from '../../selectors/burnPermitSiteSelectors'\r\n\r\n\r\nclass BurnPermitReferenceDirections extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n\r\n this.validationSchema = BurnPermitReferenceDirectionXref.validationSchema\r\n this.submit = this.submit.bind(this)\r\n this.validateForms = this.validateForms.bind(this)\r\n this.formiks = []\r\n }\r\n\r\n static propTypes = {\r\n Directions : array,\r\n Distances : array,\r\n ReferenceDirectionTypes : array,\r\n referenceDirections : array,\r\n submit : func,\r\n onChange : func,\r\n readOnly : bool,\r\n }\r\n\r\n async validateForms () {\r\n const validForms = await Promise.all([ ...this.formiks.filter(f => !!f).map(async f => {\r\n const errors = await f.validateForm()\r\n return isEmpty(errors)\r\n }, []), ])\r\n return validForms.every(v => v)\r\n }\r\n\r\n submit () {\r\n // Only return forms that are checked/visible\r\n const refDirs = this.formiks.filter(f => !!f)\r\n .map(f => f.values)\r\n .filter(f => !!f.ShowDistanceDirection)\r\n return refDirs\r\n }\r\n\r\n submitForm = async (values) => {\r\n return values\r\n }\r\n\r\n setFormik = node => {\r\n if (node) {\r\n this.formiks.splice(node.values.FormIndex, 1, node)\r\n }\r\n }\r\n\r\n render () {\r\n const {\r\n readOnly,\r\n onChange,\r\n referenceDirections,\r\n ReferenceDirectionTypes,\r\n } = this.props\r\n return <>\r\n \r\n \r\n \r\n {\r\n ReferenceDirectionTypes.map((r, idx) => {\r\n const refDir = referenceDirections.find(rd => rd.ReferenceDirectionTypeId === r.ReferenceDirectionTypeId) || {}\r\n return \r\n {({ values, errors, }) => (\r\n <>\r\n {\r\n typeof onChange === 'function'\r\n ? \r\n : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ field, }) => (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n })\r\n }\r\n \r\n \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n Distances : distancesSelectSelector(state),\r\n Directions : directionsSelectSelector(state),\r\n ReferenceDirectionTypes : referenceDirectionTypesSelector(state),\r\n referenceDirections : burnPermitReferenceDirectionsSelector(state, props.burnPermitSiteId),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, null, null, { forwardRef: true, })(BurnPermitReferenceDirections)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Formik, Field, } from 'formik'\nimport { isEmpty, } from 'lodash'\nimport { Row, Col, FormGroup, Label, Card, CardBody, } from 'reactstrap'\nimport { bool, string, number, object, array, func, } from 'prop-types'\n\n// Reducers\nimport BurnPermitSiteActions from '../../redux/BurnPermitSiteRedux'\n\n// Components\nimport BurnPermitFormSection from './FormSection'\nimport BurnPermitSiteEquipment from '../FormControls/BurnPermitSiteEquipment'\nimport BurnPermitReferenceDirections from '../FormControls/BurnPermitReferenceDirections'\nimport {\n PopoverButton,\n Select,\n CheckBoxes,\n YesNoRadioButtonGroup,\n AutoComplete,\n ValidatingField,\n RequiredLabel,\n} from '../FormControls'\n\n// Selectors\nimport { \n daysOfWeekCheckboxSelector,\n equipmentTypeCheckboxSelector,\n} from '../../selectors/selectors'\nimport {\n burnPermitSiteByIdSelector,\n forestTypesSelectSelector,\n burnReasonSelectSelector,\n burnUnitSelector,\n} from '../../selectors/burnPermitSiteSelectors'\nimport { itemsByModelNameSelector, } from '../../selectors/modelSelectors'\n\n// Utilities\nimport { getTodaysDate, } from '../../utilities'\nimport retry from '../../utilities/retry'\nimport stopEvent from '../../utilities/stopEvent'\n\n\n// Models\nimport BurnPermitSite from '../../models/BurnPermitSite'\nimport Effect from '../Effect'\n\n// CONSTANTS\nconst FIRE_LINE_CONSTRUCTION = 'Fire Line Construction'\nconst EXTINGUISHING = 'Extinguishing'\nconst ARRIVAL_TIME = 'ArrivalTime'\n\n\nexport class BurnPermitSiteSection extends React.Component {\n constructor (props) {\n super(props)\n\n this.validateSection = this.validateSection.bind(this)\n this.validationSchema = BurnPermitSite.validationSchema\n this.onFormChange = this.onFormChange.bind(this)\n }\n\n static propTypes = {\n validationError : string,\n sectionId : number.isRequired,\n burnPermitSite : object,\n burnPermitSiteId : number,\n PlannedBurnDays : array, \n ArrivalTime : array,\n FireLineEquipmentType : array,\n ExtinguishEquipmentType : array,\n ForestTypes : array,\n BurnReasons : array,\n GetBurnPermitSiteInfo : func,\n UpdateBurnPermitSite : func,\n readOnly : bool,\n BurnUnits : array,\n online : bool,\n isActive : bool,\n }\n\n static defualtProps = {\n readOnly: false,\n }\n\n state = {\n isValid: '',\n }\n\n rowClasses = 'mb-3'\n\n componentDidMount () {\n const { GetBurnPermitSiteInfo, online, isActive, } = this.props\n\n if (online && isActive) {\n GetBurnPermitSiteInfo(this.props.burnPermitSiteId)\n }\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.isActive !== true && this.props.isActive === true) {\n this.props.GetBurnPermitSiteInfo(this.props.burnPermitSiteId)\n }\n }\n\n async validateSection ({ evt, submit = true, }) {\n if (evt) {\n stopEvent(evt)\n }\n\n if (!this.formik) {\n return await retry(this.validateSection, { submit, }, 100)\n }\n\n const thisFormsErrors = await this.formik.validateForm()\n\n let refDirsAreValid = false, referenceDirections = []\n if (this.ReferenceDirectionForm) {\n refDirsAreValid = await this.ReferenceDirectionForm.validateForms()\n if (refDirsAreValid) {\n referenceDirections = this.ReferenceDirectionForm.submit()\n }\n }\n\n let siteEquipsAreValid = false, siteEquip = []\n if (this.SiteEquipmentForm) {\n siteEquipsAreValid = await this.SiteEquipmentForm.validateForms()\n if (siteEquipsAreValid) {\n siteEquip = this.SiteEquipmentForm.submit()\n }\n }\n\n let isValid = isEmpty(thisFormsErrors) && refDirsAreValid && siteEquipsAreValid\n if (isValid && submit) {\n const burnPermitSite = {\n ...this.formik.values,\n BurnPermitSiteEquipment : siteEquip,\n BurnPermitSiteReferenceDirections : referenceDirections,\n }\n\n this.props.UpdateBurnPermitSite(burnPermitSite)\n }\n\n return isValid\n }\n\n setSiteEquipFormikRef = node => this.SiteEquipmentForm = node\n\n setRefDirFormikRef = node => this.ReferenceDirectionForm = node\n\n firstRowStyles = {\n display : 'flex',\n justifyContent : 'space-between',\n flexDirection : 'column',\n height : '100%',\n padding : '0 0 1em',\n }\n\n onFormChange () {\n this.validateSection({ submit: false, }).then(isValid => {\n this.setState({ isValid, })\n })\n }\n\n setFormikNode = node => this.formik = node\n\n render () {\n const { readOnly, burnPermitSite, } = this.props\n let form = null\n if (burnPermitSite !== null) {\n form = \n {({ values, errors, isValidating, }) => (\n <>\n \n \n \n \n \n \n
    \n
    \n Primary Forest Types\n \n

    \n Select the primary forest/fuel type that the piles were harvested from or where broadcast/natural burning\n will occur. Select a value from the drop down menu for your area. You may view more detailed descriptions\n here.\n

    \n \n }\n />\n
    \n \n {({ field, }) => (\n \n )}\n \n
    \n \n \n \n {({ field, }) => (\n \n )}\n \n \n \n \n How many people will be on site when burning?\n \n \n \n
    \n \n \n \n Unit Name\n \n \n \n \n \n \n Approximate date unit was harvested.
    If unit was harvested over an extended period of time, enter date when the unit was 70 percent cut. Leave blank if natural fuels (i.e. not harvested)}\n />\n \n
    \n \n \n \n \n Approximate date snow melted off.
    Leave blank if unit was not covered with snow last winter}\n />\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n {({ field, ...formProps }) => (\n \n )}\n \n \n \n \n \n Do you plan to burn during the closed season?\n \n
    \n (April 15 through October 15)\n \n {({ field, ...formProps }) => (\n {\n const { name, value, } = evt.target\n formProps.form.setFieldValue(name, value === 'yes')\n }}\n inputName={field.name}\n checkedValue={field.value}\n readOnly={readOnly}\n errorMessage={errors[field.name]}\n required={true}\n />\n )}\n \n
    \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n \n \n )}\n \n }\n return \n { form }\n \n }\n}\n\nfunction mapStateToProps (state, props) {\n const { online, } = state.offline\n const { applications, activeBurnPermitId, } = state.BurnPermitForm\n const isActive = applications[activeBurnPermitId].activeStep === props.sectionId\n return {\n online,\n isActive,\n PlannedBurnDays : daysOfWeekCheckboxSelector(state),\n ArrivalTime : itemsByModelNameSelector(state, ARRIVAL_TIME),\n FireLineEquipmentType : equipmentTypeCheckboxSelector(state, { category: FIRE_LINE_CONSTRUCTION, }),\n ExtinguishEquipmentType : equipmentTypeCheckboxSelector(state, { category: EXTINGUISHING, useDesc: true, }),\n burnPermitSite : burnPermitSiteByIdSelector(state, props.burnPermitSiteId),\n ForestTypes : forestTypesSelectSelector(state),\n BurnReasons : burnReasonSelectSelector(state),\n BurnUnits : burnUnitSelector(state),\n }\n}\n \nconst mapDispatchToProps = {\n GetBurnPermitSiteInfo : BurnPermitSiteActions.getBurnPermitSiteInfo,\n UpdateBurnPermitSite : BurnPermitSiteActions.updateBurnPermitSite,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitSiteSection)","// Libraries\nimport React from 'react'\nimport { Formik, Field, } from 'formik'\nimport {\n Button,\n Col,\n FormGroup,\n Input,\n Label,\n Row,\n} from 'reactstrap'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport * as Yup from 'yup'\nimport { string, number, bool, } from 'prop-types'\n\n// Components\nimport { AssignedStaff, AssignToMe, Select, } from '../FormControls'\nimport { CommentRow, } from './'\n\n// Redux\nimport BurnPermitFormActions from '../../redux/BurnPermitFormRedux'\n\n// Selectors\nimport {\n getDnrUsersForSelect,\n networkStateSelector,\n permitApplicationStatuses,\n} from '../../selectors/selectors'\n\n// Utilities\n\n// Yup Validation Schemas\nconst COMMENT_SCHEMA = Yup.object().shape({\n Comment: Yup.string().ensure().required('You must enter a comment.'),\n})\n\nconst APPLICATION_STATUS_SCHEMA = Yup.object().shape({\n BurnPermitApplicationStatusId : Yup.number().min(1, 'You must choose an status.'),\n AssignedTo : Yup.string().ensure().required('You must assign someone.'),\n})\n\n\nconst ApplicationStatusForm = props => {\n\n const {\n burnPermitId,\n isIssued,\n canEditPermitStatus,\n appStatusIsReadOnly,\n } = props\n\n const dispatch = useDispatch()\n const formikRef = React.useRef(null)\n\n const { online, } = useSelector(networkStateSelector)\n\n const dnrUsers = useSelector(getDnrUsersForSelect)\n\n const submit = React.useCallback((values, form) => {\n // If a permit has been issued, the status can no longer be changed\n if (isIssued === true) {\n return\n }\n\n values.AssignedToId = (dnrUsers.find(u => u.Text === values.AssignedTo) || {}).Value\n values.AssignedTo = null // Null this out as the API tries to serialize it to a class which will throw an error\n\n dispatch(BurnPermitFormActions.submitApplicationStatus(values))\n\n form.resetForm()\n }, [ dispatch, dnrUsers, isIssued, ])\n\n const setFormikRef = React.useCallback((node) => {\n if (node) {\n formikRef.current = node\n }\n return () => {\n if (formikRef && formikRef.current) {\n formikRef.current = null\n }\n }\n }, [])\n\n const BurnPermitApplicationStatuses = useSelector((state) => {\n return permitApplicationStatuses(state, burnPermitId)\n .filter(s => s.Text !== 'Pending' && s.Text !== 'Submitted')\n })\n\n const applicationStatusIsReadOnly = (isIssued || !canEditPermitStatus || appStatusIsReadOnly)\n\n const valSchema = canEditPermitStatus\n ? APPLICATION_STATUS_SCHEMA\n : COMMENT_SCHEMA\n\n const form = \n {(formProps) => (\n <>\n {\n canEditPermitStatus && \n { !online &&

    Recording a Status requires an internet connection. The form will enable when a connection is restored.

    }\n \n \n \n {({ field, }) => (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {({ field, }) => (\n <>\n \n {\n !field.value && \n \n Warning: This comment will be visible to the applicant\n and they will be emailed the change of Application Status.\n \n }\n \n )}\n \n \n \n \n \n \n {({ field, }) => (\n \n )}\n \n \n \n
    \n }\n \n \n \n \n Reset\n \n \n \n \n Submit\n \n \n \n \n )}\n \n\n return form\n}\n\nApplicationStatusForm.propTypes = {\n burnPermitId : number,\n ValidDate : string,\n ExpirationDate : string,\n isIssued : bool,\n readOnly : bool,\n showPermitDurationRadioButtons : bool,\n canEditPermitStatus : bool,\n appStatusIsReadOnly : bool,\n}\n\nexport default ApplicationStatusForm\n","// Libraries\r\nimport React from 'react'\r\nimport { bool, } from 'prop-types'\r\nimport { Field, } from 'formik'\r\nimport {\r\n Col,\r\n FormGroup,\r\n Label,\r\n Row,\r\n} from 'reactstrap'\r\n\r\n// Components\r\nimport { ValidatingField, } from '../FormControls'\r\n\r\n\r\nconst CommentRow = props => {\r\n const { online, } = props\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n}\r\n\r\nCommentRow.propTypes = {\r\n online: bool,\r\n}\r\n\r\nCommentRow.defaultProps = {\r\n online: true,\r\n}\r\n\r\nexport default CommentRow","// Libraries\r\nimport React from 'react'\r\nimport { Button, } from 'reactstrap'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { func, array, } from 'prop-types'\r\n\r\n// Components\r\nimport ConfirmationModal from '../ConfirmationModal'\r\n\r\n// Redux\r\nimport UiActions from '../../redux/UiRedux'\r\n\r\n\r\nconst modalKey = 'EXTEND_PERMIT'\r\n\r\nconst ExtendPermit = props => {\r\n const { submitAction, submitArgs, } = props\r\n const dispatch = useDispatch()\r\n const openModal = React.useCallback(() => dispatch(UiActions.openModal(modalKey)), [ dispatch, ])\r\n return <>\r\n \r\n Extend Permit\r\n \r\n \r\n

    Are you sure you wish to extend this Burn Permit?

    \r\n

    You and the applicant will have to sign the Burn Permit in DocuSign.

    \r\n }\r\n submitActionLabel={'Yes, I am sure'}\r\n submitAction={submitAction}\r\n submitArgs={submitArgs}\r\n />\r\n \r\n}\r\n\r\nExtendPermit.propTypes = {\r\n submitArgs : array,\r\n submitAction : func,\r\n}\r\n\r\nexport default ExtendPermit","// Libraries\r\nimport React from 'react'\r\nimport * as Yup from 'yup'\r\nimport { Formik, Field, } from 'formik'\r\nimport { bool, string, func, } from 'prop-types'\r\nimport { Col, Label, Row, } from 'reactstrap'\r\n\r\n// Components\r\nimport ValidatingField from '../FormControls/ValidatingField'\r\nimport ExtendPermit from '../Modals/ExtendPermit'\r\n\r\n// Utilities\r\nimport { getDateInXDays, isAfter, } from '../../utilities'\r\n\r\n\r\nconst PERMIT_EXTENSION_SCHEMA = Yup.object().shape({\r\n ExpirationDate: Yup.date()\r\n .label('Expiration Date')\r\n .typeError('Expiration Date must be a valid date.')\r\n .test('exp-after-valid',\r\n 'Expiration Date must be after Valid Date.',\r\n function (value) {\r\n if (value && this.parent.ValidDate) {\r\n return isAfter(this.parent.ValidDate, value)\r\n }\r\n return true\r\n }\r\n ),\r\n ValidDate: Yup.date().required('You must set a Valid date.'),\r\n})\r\n\r\nconst ExtendPermitForm = (props) => {\r\n const { \r\n readOnly,\r\n onSubmit,\r\n ValidDate,\r\n } = props\r\n\r\n return \r\n {({ values, handleSubmit, }) => (\r\n <>\r\n {!readOnly &&

    Set the new expiration date for the permit. It must be a date later than 14 days from today.

    }\r\n \r\n \r\n \r\n \r\n \r\n \r\n { !readOnly &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n )}\r\n \r\n}\r\n\r\nExtendPermitForm.propTypes = {\r\n readOnly : bool,\r\n ExpirationDate : string,\r\n onSubmit : func,\r\n ValidDate : string,\r\n}\r\n\r\nExtendPermitForm.defaultProps = {\r\n readOnly : false,\r\n ExpirationDate : '',\r\n onSubmit : () => {},\r\n ValidDate : '',\r\n}\r\n\r\nexport default ExtendPermitForm","// Libraries\nimport React, { useCallback, } from 'react'\nimport { useField, useFormikContext, } from 'formik'\nimport { bool, string, } from 'prop-types'\n\n// Components\nimport { ValidatingField, } from '../FormControls'\n\n// Utilities\nimport { dateFormatter, } from '../../utilities'\n\n\nconst ValidDateField = (props) => {\n\n const { values, setValues, errors, } = useFormikContext()\n\n const { ValidDate, PermitDuration, } = values\n const [ inputProps, ] = useField({ ...props, value: ValidDate, })\n const formProps = {\n errors,\n }\n\n const validDateChange = useCallback((evt) => {\n let expDate = ''\n const { value, } = evt.target\n if (value) {\n expDate = dateFormatter(value).add(PermitDuration, 'year')\n expDate = dateFormatter(expDate.toDate(), 'YYYY-MM-DD')\n }\n setValues({\n ...values,\n ValidDate : value,\n ExpirationDate : expDate,\n PermitDuration : PermitDuration,\n })\n return evt || value\n }, [ setValues, values, PermitDuration, ])\n\n return \n}\n\nValidDateField.defaultProps = {\n name : 'ValidDate',\n type : 'date',\n readOnly : false,\n}\n\nValidDateField.propTypes = {\n name : string,\n type : string,\n readOnly : bool,\n}\n\nexport default React.memo(ValidDateField)\n","// Libraries\nimport React, { useCallback, useMemo, } from 'react'\nimport { useField, useFormikContext, } from 'formik'\nimport { bool, string, } from 'prop-types'\n\n// Components\nimport { RadioInputs, } from '../FormControls'\n\n// Utilities\nimport { dateFormatter, } from '../../utilities'\n\n\nconst PermitDurationField = props => {\n const [ field, ] = useField(props)\n const { name, value, } = field\n\n const PermitDurations = useMemo(() => ([\n {\n Value : '1',\n Text : 'One Year',\n },\n {\n Value : '2',\n Text : 'Two Years',\n },\n ]), [])\n\n const { values, setFieldValue, } = useFormikContext()\n\n const { ValidDate, } = values\n\n const expirationYearChange = useCallback((evt) => {\n let expDate = ''\n // Include validation telling users to first set a Valid Date \n // before selecting a duration\n const newVal = evt.target.value\n if (newVal && ValidDate) {\n expDate = dateFormatter(ValidDate).add(newVal, 'year')\n expDate = dateFormatter(expDate.toDate(), 'YYYY-MM-DD')\n }\n setFieldValue('ExpirationDate', expDate)\n setFieldValue(name, newVal)\n return evt || newVal\n }, [ setFieldValue, name, ValidDate, ])\n\n return \n}\n\nPermitDurationField.defaultProps = {\n name : 'PermitDuration',\n type : 'text',\n readOnly : false,\n}\n\nPermitDurationField.propTypes = {\n name : string,\n type : string,\n readOnly : bool,\n}\n\nexport default React.memo(PermitDurationField)\n","// Libraries\nimport React, { useCallback, useEffect, useMemo, } from 'react'\nimport { Formik, Field, useFormikContext, } from 'formik'\nimport {\n Col,\n FormGroup,\n Label,\n Row,\n} from 'reactstrap'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport * as Yup from 'yup'\nimport { string, number, bool, object, } from 'prop-types'\n\n// Components\nimport { ValidatingField, } from '../FormControls'\nimport { IssuePermit, PreviewPermit, } from '../Modals'\nimport ValidDateField from './ValidDateField'\nimport PermitDurationField from './PermitDurationField'\n\n// Redux\nimport BurnPermitSignatureActions from '../../redux/BurnPermitSignatureRedux'\n\n// Selectors\nimport { signatureByPermitId, } from '../../selectors/burnPermitSignatureSelectors'\nimport { appIsOnlineSelector, } from '../../selectors/selectors'\n\n// Utilities\nimport { dateFormatter, } from '../../utilities'\n\n\nconst PERMIT_STATUS_SCHEMA = Yup.object().shape({\n ValidDate : Yup.date().required('You must set a Valid date.'),\n ExpirationDate : Yup.date().required('You must set an Expiration date.'),\n})\n\n\nconst FormValidator = () => {\n const { values, submitForm, } = useFormikContext()\n const { ValidDate, PermitDuration, } = values\n useEffect(() => {\n if (!ValidDate || !PermitDuration) {\n submitForm()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n return null\n}\n\n\nconst IssuePermitForm = props => {\n\n const {\n burnPermitId,\n ValidDate,\n ExpirationDate,\n isIssued,\n readOnly,\n showPermitDurationRadioButtons,\n } = props\n\n const dispatch = useDispatch()\n\n const online = useSelector(appIsOnlineSelector)\n\n const signature = useSelector((state) => signatureByPermitId(state, burnPermitId))\n\n const issuePermit = useCallback(args => {\n const { values, submitForm, } = args\n\n const validDate = dateFormatter(values.ValidDate)\n const expirationDate = dateFormatter(values.ExpirationDate)\n\n let hasError = false\n let showModal = false\n if (!validDate || validDate.isValid() === false) {\n hasError = true\n }\n\n if (!hasError && (!expirationDate || expirationDate.isValid() === false)) {\n hasError = true\n }\n\n if (hasError === false) {\n dispatch(BurnPermitSignatureActions.signPermit(burnPermitId, validDate, expirationDate))\n showModal = true\n return showModal\n }\n submitForm()\n return showModal\n }, [ dispatch, burnPermitId, ])\n\n const PermitDuration = useMemo(() => {\n if (ValidDate && ExpirationDate) {\n return (new Date(ExpirationDate).getFullYear() - new Date(ValidDate).getFullYear()).toString()\n }\n return '2'\n }, [ ValidDate, ExpirationDate, ])\n\n const initValues = useMemo(() => ({\n BurnPermitId : burnPermitId,\n ValidDate : ValidDate || '',\n ExpirationDate : ExpirationDate || '',\n Comment : '', // Comments are not actually supported yet\n PermitDuration,\n }), [ burnPermitId, ValidDate, ExpirationDate, PermitDuration, ])\n\n const formChildren = useCallback((formProps) => {\n // const noValidDate = !formProps.values.ValidDate || dateFormatter(formProps.values.ValidDate).isValid() === false\n // const noExpiration = !formProps.values.ExpirationDate || dateFormatter(formProps.values.ExpirationDate).isValid() === false\n // const datesInvalid = noValidDate || noExpiration\n return <>\n \n \n { !online && !isIssued && \n

    Issuing a permit requires an internet connection. The form will enable when a connection is restored.

    \n \n }\n \n \n \n \n \n \n \n \n { showPermitDurationRadioButtons &&\n \n \n \n \n \n }\n
    \n { !signature.PermitApproverSignedBy &&\n \n \n
    \n \n 1 && !formProps.isValid}\n ExpirationDate={formProps.values.ExpirationDate}\n ValidDate={formProps.values.ValidDate}\n />\n
    \n \n
    \n }\n \n }, [ burnPermitId, online, isIssued, readOnly, issuePermit, showPermitDurationRadioButtons, signature, ])\n\n return \n {formChildren}\n \n}\n\nIssuePermitForm.propTypes = {\n burnPermitId : number,\n ValidDate : string,\n ExpirationDate : string,\n isIssued : bool,\n readOnly : bool,\n showPermitDurationRadioButtons : bool,\n form : object,\n}\n\nexport default IssuePermitForm\n","// Libraries\r\nimport React from 'react'\r\nimport * as Yup from 'yup'\r\nimport { Formik, Field, Form, } from 'formik'\r\nimport { bool, string, func, } from 'prop-types'\r\nimport { Col, Label, Row, Button, } from 'reactstrap'\r\n\r\n// Components\r\nimport ValidatingField from '../FormControls/ValidatingField'\r\n\r\n\r\nconst REVOKE_PERMIT_SCHEMA = Yup.object().shape({\r\n RevokedDate: Yup.date().required('You must provide the date the Burn Permit was revoked.'),\r\n})\r\n\r\n\r\nconst RevokePermitForm = (props) => {\r\n const { \r\n RevokedDate,\r\n Comment,\r\n readOnly,\r\n onSubmit,\r\n onUndo,\r\n isRevoked,\r\n } = props\r\n\r\n const canClear = !readOnly && !!RevokedDate\r\n\r\n return \r\n
    \r\n {!readOnly &&

    Revoke a Burn Permit when burning should be permanently restricted. Make sure to search for any active Burn Requests that may need to be denied as part of this revocation.

    }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Warning: This comment will be visible to the permittee and/or agent.\r\n \r\n \r\n { !readOnly &&\r\n \r\n \r\n { !isRevoked && }\r\n { canClear && }\r\n \r\n \r\n }\r\n
    \r\n \r\n}\r\n\r\nRevokePermitForm.propTypes = {\r\n readOnly : bool,\r\n RevokedDate : string,\r\n Comment : string,\r\n onSubmit : func,\r\n onUndo : func,\r\n isRevoked : bool,\r\n}\r\n\r\nRevokePermitForm.defaultProps = {\r\n readOnly : false,\r\n RevokedDate : '',\r\n Comment : '',\r\n onSubmit : () => {},\r\n onUndo : () => {},\r\n}\r\n\r\nexport default RevokePermitForm","// Libraries\r\nimport React from 'react'\r\nimport * as Yup from 'yup'\r\nimport { Formik, Field, Form, } from 'formik'\r\nimport { bool, string, func, } from 'prop-types'\r\nimport { Col, Label, Row, Button, } from 'reactstrap'\r\n\r\n// Utilities\r\nimport { isAfter, } from '../../utilities'\r\n\r\n// Components\r\nimport ValidatingField from '../FormControls/ValidatingField'\r\n\r\n\r\nconst PERMIT_SUSPENSION_SCHEMA = Yup.object().shape({\r\n SuspensionStartDate: Yup.date()\r\n .label('Suspension Start Date')\r\n .typeError('Suspension Start Date must be a valid date.')\r\n .test('start-or-end-hasvalue',\r\n 'Either Suspension Start or End Date must be specified.',\r\n function (value) {\r\n if (value || this.parent.SuspensionEndDate) {\r\n return true\r\n }\r\n return false\r\n }\r\n )\r\n .test('start-before-end',\r\n 'Suspension Start Date must be before Suspension End Date.',\r\n function (value) {\r\n if (value && this.parent.SuspensionEndDate) {\r\n return isAfter(value, this.parent.SuspensionEndDate)\r\n }\r\n return true\r\n }\r\n ),\r\n SuspensionEndDate: Yup.date()\r\n .label('Suspension End Date')\r\n .typeError('Suspension End Date must be a valid date.')\r\n .test('end-after-start',\r\n 'Suspension End Date must be after Suspension Start Date.',\r\n function (value) {\r\n if (value && this.parent.SuspensionStartDate) {\r\n return isAfter(this.parent.SuspensionStartDate, value)\r\n }\r\n return true\r\n }\r\n ),\r\n SuspensionComment: Yup.string(),\r\n})\r\n\r\n\r\nconst SuspensionForm = (props) => {\r\n const { \r\n suspensionStartDate, \r\n suspensionEndDate, \r\n suspensionComment,\r\n readOnly, \r\n onSubmit, \r\n onEndSuspension,\r\n } = props\r\n\r\n const canClear = !readOnly && (!!suspensionStartDate || !!suspensionEndDate)\r\n\r\n return \r\n \r\n
    \r\n

    Suspend a Burn Permit when burning should be temporarily restricted. Make sure to search for any active Burn Requests that may need to be denied as part of this suspension.

    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n !readOnly &&\r\n \r\n \r\n \r\n { canClear && }\r\n \r\n \r\n }\r\n
    \r\n \r\n}\r\n\r\nSuspensionForm.propTypes = {\r\n readOnly : bool,\r\n suspensionStartDate : string,\r\n suspensionEndDate : string,\r\n suspensionComment : string,\r\n onSubmit : func,\r\n onEndSuspension : func,\r\n}\r\n\r\nSuspensionForm.defaultProps = {\r\n readOnly : false,\r\n suspensionStartDate : '',\r\n suspensionEndDate : '',\r\n suspensionComment : '',\r\n onSubmit : () => {},\r\n onEndSuspension : () => {},\r\n}\r\n\r\nexport default SuspensionForm","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { PropTypes, string, number, func, object, array, bool, } from 'prop-types'\r\nimport {\r\n Col,\r\n Card,\r\n CardBody,\r\n Modal,\r\n ModalBody,\r\n ModalHeader,\r\n ModalFooter,\r\n Button,\r\n Row,\r\n Fade,\r\n Alert,\r\n CardHeader,\r\n} from 'reactstrap'\r\nimport { isEmpty, } from 'lodash'\r\n\r\n// Redux\r\nimport BurnPermitSignatureActions from '../../redux/BurnPermitSignatureRedux'\r\nimport BurnPermitFormActions from '../../redux/BurnPermitFormRedux'\r\nimport ConditionActions from '../../redux/BurnPermitConditionsRedux'\r\nimport PersonActions from '../../redux/PersonRedux'\r\n\r\n// Components\r\nimport DataTable from '../DataTable'\r\nimport {\r\n SuspensionForm,\r\n RevokePermitForm,\r\n ExtendPermitForm,\r\n IssuePermitForm,\r\n ApplicationStatusForm,\r\n} from '../PermitStatus'\r\nimport { ReIssuePermit, } from '../Modals'\r\n\r\n// Selectors\r\nimport {\r\n permitStatusHistory,\r\n permitStatus,\r\n networkStateSelector,\r\n} from '../../selectors/selectors'\r\nimport { isLoadingDocuSignUrl, signatureByPermitId, } from '../../selectors/burnPermitSignatureSelectors'\r\nimport {\r\n userCanSeeInternalOnly,\r\n userCanEditPermitStatus,\r\n userCanEditPermitConditions,\r\n} from '../../selectors/burnPermitPermissionSelectors'\r\nimport { userNameSelector, } from '../../selectors/userSelectors'\r\nimport {\r\n permitDates,\r\n permitApplicationStatus,\r\n permitIsIssued,\r\n permitIsExpiredSelector,\r\n permitHasSignedPermitDoc,\r\n} from '../../selectors/burnPermitSelectors'\r\nimport { conditionValuesNewForBurnPermitSelector, } from '../../selectors/conditionsSelectors'\r\n\r\n// Utilities\r\nimport { renderDateTime, renderCheckIcon, } from '../../utilities/columnHelpers'\r\nimport { dateFormatter, } from '../../utilities'\r\n\r\n// Constants\r\nconst DELETE_APPLICATION_STATUS_MODAL_TYPE = 'DELETE_APPLICATION_STATUS'\r\nconst DELETE_PERMIT_STATUS_MODAL_TYPE = 'DELETE_PERMIT_STATUS'\r\nconst DELETE_ICON = ''\r\n\r\n\r\nclass BurnPermitStatusSection extends React.Component {\r\n static propTypes = {\r\n BurnPermitApplicationStatusId : PropTypes.oneOfType([ number, string, ]),\r\n AssignedToId : PropTypes.oneOfType([ number, string, ]),\r\n IsLoadingDocuSignUrl : bool,\r\n // from parent\r\n isApproved : bool,\r\n burnPermitId : number.isRequired,\r\n isSuspended : bool,\r\n isRevoked : bool,\r\n // actions\r\n LoadingDocuSignUrl : func,\r\n GetAssignableUsers : func,\r\n ConditionSetPermit : func,\r\n GetBurnPermitStatusHistory : func.isRequired,\r\n SubmitApplicationStatus : func,\r\n DeleteApplicationStatus : func,\r\n DeletePermitStatus : func,\r\n ReIssuePermit : func,\r\n ClearSuspension : func,\r\n UpdateSuspension : func,\r\n RevokePermit : func,\r\n UndoRevocation : func,\r\n // selectors\r\n isGovAgentPermit : bool,\r\n ValidDate : string,\r\n ExpirationDate : string,\r\n SuspensionStartDate : string,\r\n SuspensionEndDate : string,\r\n SuspensionComment : string,\r\n RevokedDate : string,\r\n RevokedComment : string,\r\n dnrUsers : array,\r\n userName : string,\r\n BurnPermitStatusHistory : array,\r\n appStatusIsReadOnly : bool,\r\n signature : object,\r\n BurnPermitStatusId : PropTypes.oneOfType([ number, string, ]),\r\n HasConditionsSet : bool,\r\n isIssued : bool,\r\n hasSignedDoc : bool,\r\n isExpired : bool,\r\n ExtendPermit : func,\r\n online : bool,\r\n canViewInternalOnly : bool,\r\n canEditPermitStatus : bool,\r\n canEditPermitConditions : bool,\r\n canComment : bool,\r\n isDnr : bool,\r\n }\r\n \r\n get columns () {\r\n const defs = [ \r\n {\r\n title : 'Status',\r\n data : 'Status',\r\n },\r\n {\r\n data : 'StatusDate',\r\n title : 'Status Date',\r\n render : renderDateTime,\r\n },\r\n {\r\n title : 'Comment',\r\n data : 'Comment',\r\n defaultContent : '',\r\n },\r\n {\r\n data : 'SiteInspected',\r\n title : 'Site Inspected',\r\n width : '105px',\r\n defaultContent : '',\r\n render : renderCheckIcon,\r\n },\r\n {\r\n title : 'Assigned To',\r\n data : 'AssignedTo',\r\n defaultContent : '',\r\n }, \r\n {\r\n title : 'User',\r\n data : 'CreateBy',\r\n defaultContent : '',\r\n }, \r\n ]\r\n if (this.props.canViewInternalOnly) {\r\n defs.push({\r\n data : 'InternalOnly',\r\n title : 'Internal',\r\n width : '10px',\r\n defaultContent : '',\r\n render : renderCheckIcon,\r\n })\r\n \r\n if (this.props.isIssued !== true) {\r\n defs.push({\r\n data : 'CreateBy',\r\n title : 'Delete',\r\n width : '10px',\r\n className : 'delete-record',\r\n defaultContent : '',\r\n render : this.deleteButtonCol,\r\n })\r\n }\r\n }\r\n return defs\r\n }\r\n\r\n state = {\r\n redraw : false,\r\n editingSuspension : false,\r\n revokingPermit : false,\r\n extendingPermit : false,\r\n activeButton : '',\r\n modalState : {\r\n isModalVisible : false,\r\n modalType : '',\r\n modalData : null,\r\n },\r\n }\r\n\r\n deleteButtonCol = (data, drawType, row) => {\r\n if (drawType !== 'display') {\r\n return data\r\n }\r\n if (row && row.Status !== 'Pending' && data === this.props.userName && this.props.isIssued !== true) {\r\n return DELETE_ICON\r\n } \r\n return ''\r\n }\r\n\r\n showDeleteStatusModal = rowData => {\r\n if (rowData.BurnPermitApplicationStatusXrefId) {\r\n this.setState({ \r\n modalState: {\r\n isModalVisible : true,\r\n modalType : DELETE_APPLICATION_STATUS_MODAL_TYPE,\r\n modalData : {\r\n BurnPermitApplicationStatusXrefId : rowData.BurnPermitApplicationStatusXrefId,\r\n Comment : rowData.Comment,\r\n StatusName : rowData.Status,\r\n InternalOnly : rowData.InternalOnly,\r\n },\r\n },\r\n })\r\n }\r\n else if (rowData.BurnPermitStatusXrefId) {\r\n this.setState({ \r\n modalState: {\r\n isModalVisible : true,\r\n modalType : DELETE_PERMIT_STATUS_MODAL_TYPE,\r\n modalData : {\r\n BurnPermitStatusXrefId : rowData.BurnPermitStatusXrefId,\r\n Comment : rowData.Comment,\r\n StatusName : rowData.Status,\r\n InternalOnly : rowData.InternalOnly,\r\n },\r\n },\r\n })\r\n }\r\n }\r\n\r\n getModalHeader = () => {\r\n const { modalState, } = this.state\r\n if (!modalState.isModalVisible) {\r\n return null\r\n }\r\n if (modalState.modalType === DELETE_APPLICATION_STATUS_MODAL_TYPE) {\r\n return 'Deleting Application Status'\r\n }\r\n else if (modalState.modalType === DELETE_PERMIT_STATUS_MODAL_TYPE) {\r\n return 'Deleting Permit Status'\r\n }\r\n }\r\n\r\n getModalBody = () => {\r\n const { modalState, } = this.state\r\n if (!modalState.isModalVisible) {\r\n return null\r\n }\r\n const { modalData, } = modalState\r\n let ID = ''\r\n if (modalState.modalType === DELETE_APPLICATION_STATUS_MODAL_TYPE) {\r\n ID = modalData.BurnPermitApplicationStatusXrefId\r\n }\r\n else if (modalState.modalType === DELETE_PERMIT_STATUS_MODAL_TYPE) {\r\n ID = modalData.BurnPermitStatusXrefId\r\n }\r\n return <>\r\n

    Are you sure you want to delete this status?

    \r\n ID: {ID}
    \r\n Status: {modalData.StatusName}
    \r\n Internal Only: {modalData.InternalOnly ? 'Yes' : 'No'}
    \r\n Comment: {modalData.Comment}\r\n \r\n }\r\n\r\n getModalFooter = () => {\r\n const { modalState, } = this.state\r\n if (!modalState.isModalVisible) {\r\n return null\r\n }\r\n let clickAction\r\n if (modalState.modalType === DELETE_APPLICATION_STATUS_MODAL_TYPE) {\r\n clickAction = this.deleteApplStatusSubmitAction\r\n }\r\n else if (modalState.modalType === DELETE_PERMIT_STATUS_MODAL_TYPE) {\r\n clickAction = this.deletePermitStatusSubmitAction\r\n }\r\n return <>\r\n \r\n \r\n \r\n }\r\n\r\n resetModalState = () => {\r\n this.setState({\r\n modalState: {\r\n isModalVisible : false,\r\n modalData : null,\r\n modalType : '',\r\n },\r\n })\r\n }\r\n\r\n // We need to request the status history on mount as it affects\r\n // other parts of the application display\r\n componentDidMount () {\r\n const { online, burnPermitId, GetBurnPermitStatusHistory, ConditionSetPermit, LoadingDocuSignUrl, } = this.props\r\n LoadingDocuSignUrl(false)\r\n if (online) {\r\n GetBurnPermitStatusHistory(burnPermitId)\r\n ConditionSetPermit(burnPermitId)\r\n }\r\n const { canEditPermitStatus, GetAssignableUsers, } = this.props\r\n if (canEditPermitStatus) {\r\n GetAssignableUsers()\r\n }\r\n /**\r\n * This changes state twice so the DataTable lifecycle methods will get\r\n * called with every change.\r\n * If redraw is set to true just once, the next time this method is called,\r\n * state is changed, and passed as a prop to DataTable, DataTable won't redraw\r\n * even if the didUpdate method in Datatable is set to only check for the \r\n * current props.redraw to be true\r\n */\r\n this.setState({ redraw: true, issuedReqs: true, }, () => {\r\n this.setState({ redraw: false, })\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n const newState = {}\r\n const { BurnPermitStatusId, BurnPermitApplicationStatusId, isSuspended, } = this.props\r\n if (!isNaN(parseInt(BurnPermitStatusId)) && prevProps.BurnPermitStatusId !== BurnPermitStatusId) {\r\n newState.BurnPermitStatusId = BurnPermitStatusId\r\n newState.modalState = {\r\n isModalVisible : false,\r\n modalData : null,\r\n modalType : '',\r\n }\r\n }\r\n if (!isNaN(parseInt(BurnPermitApplicationStatusId)) && prevProps.BurnPermitApplicationStatusId !== BurnPermitApplicationStatusId) {\r\n newState.BurnPermitApplicationStatusId = BurnPermitApplicationStatusId\r\n newState.modalState = {\r\n isModalVisible : false,\r\n modalData : null,\r\n modalType : '',\r\n }\r\n }\r\n if (prevProps.isSuspended && !isSuspended) {\r\n newState.editingSuspension = false\r\n }\r\n if (!isEmpty(newState)) {\r\n this.setState(newState)\r\n }\r\n }\r\n\r\n validateSection = () => {\r\n if (this.formik.isValid) {\r\n this.formik.submitForm()\r\n }\r\n return this.formik.isValid\r\n }\r\n\r\n deleteApplStatusSubmitAction = () => {\r\n const { burnPermitId, } = this.props\r\n const { BurnPermitApplicationStatusXrefId, } = this.state.modalState.modalData\r\n this.props.DeleteApplicationStatus(burnPermitId, BurnPermitApplicationStatusXrefId)\r\n this.resetModalState()\r\n }\r\n\r\n deletePermitStatusSubmitAction = () => {\r\n const { burnPermitId, } = this.props\r\n const { BurnPermitStatusXrefId, } = this.state.modalState.modalData\r\n this.props.DeletePermitStatus(burnPermitId, BurnPermitStatusXrefId)\r\n this.resetModalState()\r\n }\r\n\r\n reIssuePermit = () => {\r\n this.props.ReIssuePermit(this.props.burnPermitId)\r\n }\r\n\r\n endSuspension = () => {\r\n const { burnPermitId, } = this.props\r\n if (!this.props.canEditPermitStatus || !burnPermitId) {\r\n return\r\n }\r\n this.props.ClearSuspension(burnPermitId)\r\n }\r\n\r\n saveSuspension = (values) => {\r\n if (!values) {\r\n return \r\n }\r\n const { burnPermitId, } = this.props\r\n const { SuspensionStartDate, SuspensionEndDate, SuspensionComment, } = values\r\n if (!this.props.canEditPermitStatus || !burnPermitId || (!SuspensionStartDate && !SuspensionEndDate)) {\r\n return\r\n }\r\n this.props.UpdateSuspension(burnPermitId, SuspensionStartDate, SuspensionEndDate, SuspensionComment)\r\n }\r\n\r\n undoRevocation = values => {\r\n const { UndoRevocation, burnPermitId, } = this.props\r\n UndoRevocation(burnPermitId, values)\r\n this.toggleRevokingPermit()\r\n }\r\n\r\n revokePermit = values => {\r\n const { RevokePermit, burnPermitId, } = this.props\r\n RevokePermit(burnPermitId, values)\r\n this.toggleRevokingPermit()\r\n }\r\n\r\n toggleRevokingPermit = () => {\r\n const { revokingPermit, } = this.state\r\n this.setState({ revokingPermit: !revokingPermit, activeButton: !revokingPermit ? 'revoke' : '', })\r\n }\r\n\r\n extendPermit = values => {\r\n const { ExtendPermit, burnPermitId, } = this.props\r\n const { ExpirationDate, } = values\r\n ExtendPermit(burnPermitId,ExpirationDate)\r\n this.toggleExtendingPermit()\r\n }\r\n \r\n toggleExtendingPermit = () => {\r\n const { extendingPermit, } = this.state\r\n this.setState({ extendingPermit: !extendingPermit, activeButton: !extendingPermit ? 'extend' : '', })\r\n }\r\n\r\n toggleSuspension = () => {\r\n const { editingSuspension, } = this.state\r\n this.setState({ editingSuspension: !editingSuspension, activeButton: !editingSuspension ? 'suspend' : '', })\r\n }\r\n\r\n issuePermitControl = () => {\r\n const { signature, burnPermitId, } = this.props\r\n let markup = null\r\n \r\n if (!signature) {\r\n return markup\r\n }\r\n \r\n if (signature.PermitEnvelopeIsExpired === true) {\r\n markup = <>\r\n \r\n \r\n The DocuSign envelope for this Permit became void on {dateFormatter(signature.PermitEnvelopeExpiration, 'MM/DD/YYYY')}\r\n  because the applicant has not signed the Permit in DocuSign.\r\n \r\n

    \r\n Click Re-Issue Permit below to re-issue their permit.\r\n

    \r\n
    \r\n \r\n \r\n }\r\n else if (signature.PermitEnvelopeExpiringSoon === true) {\r\n markup = \r\n \r\n The DocuSign envelope for this Permit will become void on {dateFormatter(signature.PermitEnvelopeExpiration, 'MM/DD/YYYY')}\r\n  because the applicant has not signed the Permit in DocuSign.\r\n \r\n

    \r\n Contact the Permitee immediately to help them sign the Permit via DocuSign\r\n or Extend the Permit.\r\n

    \r\n
    \r\n }\r\n return {markup}\r\n }\r\n\r\n buildPermitAdminControls = () => {\r\n const {\r\n signature,\r\n isIssued,\r\n hasSignedDoc,\r\n isExpired,\r\n isRevoked,\r\n isSuspended,\r\n online,\r\n canEditPermitStatus,\r\n } = this.props\r\n const { editingSuspension, revokingPermit, extendingPermit, activeButton, } = this.state\r\n const showSuspendButton = canEditPermitStatus && (isIssued || isExpired) && hasSignedDoc && !isSuspended && !isRevoked\r\n if (!canEditPermitStatus) {\r\n return null\r\n }\r\n return \r\n

    Use these buttons to perform actions related to managing the status of the Burn Permit.

    \r\n { !online &&

    These actions require an internet connection and will be enabled once a connection is restored.

    }\r\n \r\n {\r\n signature.PermitEnvelopeIsExpired !== true &&\r\n \r\n {\r\n showSuspendButton && (!!signature.PermitApproverSignedBy || isExpired) && <>\r\n \r\n {extendingPermit ? 'Cancel' : 'Extend'}\r\n \r\n \r\n {editingSuspension ? 'Cancel' : 'Suspend'}\r\n \r\n \r\n }\r\n {\r\n isIssued && !!signature.PermitApproverSignedBy &&\r\n \r\n {revokingPermit ? 'Cancel' : 'Revoke'}\r\n \r\n }\r\n \r\n }\r\n { this.issuePermitControl() }\r\n \r\n \r\n }\r\n\r\n buildPermitRelatedLinks = () => {\r\n const {\r\n isIssued,\r\n burnPermitId,\r\n HasConditionsSet,\r\n canEditPermitConditions,\r\n hasSignedDoc,\r\n } = this.props\r\n let conditionsLinkText = 'View'\r\n const permitIsBurnable = isIssued && hasSignedDoc\r\n if (!isIssued && canEditPermitConditions) {\r\n conditionsLinkText = HasConditionsSet\r\n ? 'Edit'\r\n : 'Add'\r\n }\r\n return \r\n

    Use these links to view additional data related to the Burn Permit.

    \r\n \r\n \r\n \r\n {conditionsLinkText} Permit Conditions\r\n \r\n {\r\n permitIsBurnable &&\r\n \r\n Enter Post-Burn Data\r\n \r\n }\r\n \r\n \r\n \r\n }\r\n\r\n render () {\r\n const {\r\n isIssued,\r\n isApproved,\r\n isSuspended,\r\n isRevoked,\r\n appStatusIsReadOnly,\r\n signature,\r\n online,\r\n canEditPermitStatus,\r\n canComment,\r\n } = this.props\r\n\r\n const {\r\n editingSuspension,\r\n revokingPermit,\r\n extendingPermit,\r\n } = this.state\r\n\r\n const showApplStatusComments = (canEditPermitStatus || canComment) && !isIssued\r\n const showPermitDurationRadioButtons = canEditPermitStatus && isApproved && !isSuspended && !isRevoked && !signature.PermitApproverSignedBy\r\n\r\n return (\r\n <>\r\n { isApproved &&\r\n \r\n \r\n \r\n \r\n {this.buildPermitRelatedLinks()}\r\n {this.buildPermitAdminControls()}\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n }\r\n {\r\n !appStatusIsReadOnly &&\r\n \r\n \r\n {\r\n showApplStatusComments && \r\n \r\n \r\n Application Status\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n }\r\n { isApproved &&\r\n \r\n \r\n Permit Status\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n }\r\n
    \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n this.state.modalState.isModalVisible && <>\r\n {this.getModalHeader()}\r\n {this.getModalBody()}\r\n {this.getModalFooter()}\r\n \r\n }\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { burnPermitId, isDnr, isRevoked, } = props // By default, always get the state object\r\n \r\n const { \r\n ValidDate = '', \r\n ExpirationDate = '', \r\n SuspensionStartDate = '', \r\n SuspensionEndDate = '',\r\n SuspensionComment = '',\r\n RevokedDate = '',\r\n RevokedComment = '',\r\n } = permitDates(state, burnPermitId)\r\n\r\n const isExpired = permitIsExpiredSelector(state)\r\n\r\n const { online, } = networkStateSelector(state)\r\n const stateObj = {\r\n online,\r\n ValidDate,\r\n ExpirationDate,\r\n SuspensionStartDate,\r\n SuspensionEndDate,\r\n SuspensionComment,\r\n RevokedDate,\r\n RevokedComment,\r\n isExpired,\r\n isRevoked,\r\n IsLoadingDocuSignUrl : isLoadingDocuSignUrl(state),\r\n dnrUsers : [],\r\n userName : userNameSelector(state),\r\n BurnPermitStatusHistory : permitStatusHistory(state, burnPermitId),\r\n canViewInternalOnly : userCanSeeInternalOnly(state),\r\n canEditPermitStatus : userCanEditPermitStatus(state),\r\n canEditPermitConditions : userCanEditPermitConditions(state),\r\n canComment : false,\r\n isIssued : permitIsIssued(state, burnPermitId),\r\n isApproved : false,\r\n isDenied : false,\r\n appStatusIsReadOnly : false,\r\n }\r\n \r\n let status = permitStatus(state, burnPermitId)\r\n if (!status) {\r\n status = permitApplicationStatus(state, burnPermitId)\r\n if (status) {\r\n stateObj.isApproved = status.Status === 'Approved'\r\n stateObj.isDenied = status.Status === 'Denied'\r\n stateObj.appStatusIsReadOnly = status.Status === 'Pending'\r\n if (!isDnr) {\r\n stateObj.appStatusIsReadOnly = status.Status !== 'Info Required'\r\n stateObj.canComment = !stateObj.appStatusIsReadOnly\r\n }\r\n }\r\n }\r\n else {\r\n // Assume it's approved if there is a permit status\r\n stateObj.isApproved = true\r\n stateObj.appStatusIsReadOnly = stateObj.isIssued || isRevoked || isExpired\r\n stateObj.canEditPermitConditions = !stateObj.appStatusIsReadOnly\r\n }\r\n\r\n // If it's approved\r\n if (stateObj.isApproved) {\r\n // Get the Permit Status and Statuses\r\n const signature = signatureByPermitId(state, props.burnPermitId)\r\n const hasSignedDoc = permitHasSignedPermitDoc(state, props.burnPermitId)\r\n stateObj.hasSignedDoc = hasSignedDoc\r\n stateObj.signature = signature\r\n stateObj.BurnPermitStatusId = status ? status.BurnPermitStatusId : ''\r\n }\r\n const permitConditionValues = conditionValuesNewForBurnPermitSelector(state)\r\n stateObj.HasConditionsSet = !isEmpty(permitConditionValues)\r\n \r\n stateObj.online = state.offline.online\r\n\r\n return stateObj\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n GetAssignableUsers : PersonActions.getAssignableUsers,\r\n GetBurnPermitStatusHistory : BurnPermitFormActions.getBurnPermitStatusHistory,\r\n SubmitApplicationStatus : BurnPermitFormActions.submitApplicationStatus,\r\n DeleteApplicationStatus : BurnPermitFormActions.deleteApplicationStatus,\r\n DeletePermitStatus : BurnPermitFormActions.deletePermitStatus,\r\n ExtendPermit : BurnPermitFormActions.extendPermit,\r\n LoadingDocuSignUrl : BurnPermitSignatureActions.loadingDocuSignUrl,\r\n ReIssuePermit : BurnPermitSignatureActions.reIssuePermit,\r\n UpdateSuspension : BurnPermitFormActions.updateSuspension,\r\n ClearSuspension : BurnPermitFormActions.clearSuspension,\r\n RevokePermit : BurnPermitFormActions.revokePermit,\r\n UndoRevocation : BurnPermitFormActions.undoRevocation,\r\n ConditionSetPermit : ConditionActions.setPermitForConditions,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitStatusSection)","// Libraries\r\nimport React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { Container, Row, Col, Card, CardBody, CardText, } from 'reactstrap'\r\n\r\nconst colSize = { size: '6', offset: '3', }\r\n\r\nconst PermitFailedToLoad = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n The Burn Permit Application failed to load.\r\n One of the following may have occurred:\r\n \r\n
      \r\n
    • Your Profile is incomplete and you have not identified your Person Type.
    • \r\n
    • Your User verification is pending.
    • \r\n
    • You do not have access to the Burn Permit Application.
    • \r\n
    • The Burn Permit Application no longer exists.
    • \r\n
    • You are operating offline and did not download the Burn Permit Application.
    • \r\n
    \r\n Click the button below to navigate to your Permits list.\r\n
    \r\n
    \r\n
    \r\n View Permits\r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default React.memo(PermitFailedToLoad)","import React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { Container, Row, Col, Card, CardBody, CardText, } from 'reactstrap'\r\n\r\nconst colSize = { size: '6', offset: '3', }\r\n\r\nconst AgentUnverified = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Your user account is awaiting verification.
    \r\n You are unable to create or manage Burn Permits, Burn Requests or Post Burn data until your account is verified.
    \r\n Click the button below to navigate back to the home page.\r\n
    \r\n Home\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default React.memo(AgentUnverified)","const iconStyles = {\r\n background : '#fff',\r\n borderRadius : '50%',\r\n}\r\nexport default iconStyles","// Libraries\r\nimport React from 'react'\r\nimport { SuccessIcon, } from '../../Icons'\r\n\r\nimport style from './style'\r\n\r\nfunction Complete () {\r\n return \r\n}\r\n\r\nexport default Complete","// Libraries\r\nimport React from 'react'\r\nimport { DangerIcon, } from '../../Icons'\r\n\r\nimport style from './style'\r\n\r\nfunction Incomplete () {\r\n return \r\n}\r\n\r\nexport default Incomplete","// Libraries\r\nimport React from 'react'\r\nimport { bool, } from 'prop-types'\r\n\r\n// Components\r\nimport Complete from './Complete'\r\nimport Incomplete from './Incomplete'\r\n\r\nconst Status = (props) => {\r\n if (props.complete) {\r\n return \r\n }\r\n return \r\n}\r\n\r\nStatus.defaultProps = {\r\n complete: false,\r\n}\r\n\r\nStatus.propTypes = {\r\n complete: bool,\r\n}\r\n\r\nexport default React.memo(Status)","// Libraries\r\nimport React from 'react'\r\nimport { Alert, } from 'reactstrap'\r\nimport { Link, } from 'react-router-dom'\r\nimport { useSelector, } from 'react-redux'\r\n\r\n// Components\r\nimport { PopoverButton, } from '../FormControls'\r\nimport Status from './Icons/Status'\r\n\r\n// Selectors\r\nimport { profileStatusSelector, } from '../../selectors/userSelectors'\r\n\r\n\r\nconst popover = \r\n\r\nfunction ProfileStatus () {\r\n\r\n const profileStatus = useSelector(profileStatusSelector)\r\n if (!profileStatus || profileStatus.IsComplete === true) {\r\n return null\r\n }\r\n\r\n return \r\n

    Welcome to the Burn Portal

    \r\n

    \r\n Before you can create and manage Burn Permit Applications, Permits, and Burn Requests,\r\n you must complete your User Profile.\r\n

    \r\n

    This includes:

    \r\n
      \r\n {
    • Person Type
    • }\r\n {
    • Preferred Contact Method
    • }\r\n {
    • Phones
    • }\r\n {/*\r\n We purposefully want to use the identity operator so that the absense of a property \r\n doesn't evalutate as a falsey value and show the list item\r\n */}\r\n {\r\n typeof profileStatus.HasAddresses === 'boolean' && \r\n
    • Addresses
    • \r\n }\r\n {\r\n typeof profileStatus.HasAgency === 'boolean' && \r\n
    • Agency
    • \r\n }\r\n {\r\n typeof profileStatus.HasRegion === 'boolean' && \r\n
    • Region
    • \r\n }\r\n
    \r\n

    \r\n All throughout the application you will find help/info icons like this one {popover} that provide further explanation\r\n of the data and application requirements when clicked.\r\n

    \r\n

    \r\n If you have any questions, use the Contact Support link at the top or click the\r\n help icon in the menu bar to access the User Guide or contact your local Region office.\r\n

    \r\n
    \r\n}\r\n\r\nexport default ProfileStatus","// Libraries\r\nimport React, { useCallback, useState, } from 'react'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { func, } from 'prop-types'\r\nimport {\r\n Input,\r\n Label,\r\n Container,\r\n Card,\r\n CardBody,\r\n Button,\r\n Popover,\r\n PopoverBody,\r\n PopoverHeader,\r\n} from 'reactstrap'\r\n\r\n// Actions\r\nimport BurnPermitInstructionsActions from '../../../redux/BurnPermitInstructionsRedux'\r\n\r\n// Components\r\nimport Instructions from '../../Instructions'\r\n\r\n\r\nconst HowToApply = props => {\r\n const { understandCallback, }= props\r\n\r\n // Hooks\r\n const dispatch = useDispatch()\r\n\r\n // State\r\n const [ doNotShowAgain, setDoNotShowAgain, ] = useState(false)\r\n\r\n // UI Callbacks\r\n const checkboxChange = useCallback(() => {\r\n setDoNotShowAgain(!doNotShowAgain)\r\n }, [ doNotShowAgain, ])\r\n\r\n const userUnderstandsInstructions = useCallback(() => {\r\n if (doNotShowAgain) {\r\n dispatch(BurnPermitInstructionsActions.acknowledgedInstructions())\r\n }\r\n if (typeof understandCallback === 'function') {\r\n understandCallback()\r\n }\r\n }, [ dispatch, doNotShowAgain, understandCallback, ])\r\n\r\n return \r\n

    How to Apply for a Burn Permit

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

    Please review the steps outlined below required to obtain a Burn Permit.

    \r\n

    \r\n Once you've reviewed the steps, click the I Understand button below to continue to the Burn Permit Application\r\n

    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n}\r\n\r\nHowToApply.propTypes = {\r\n understandCallback: func,\r\n}\r\n\r\nexport default React.memo(HowToApply)","// Libraries\r\nimport React, { useCallback, useEffect, useMemo, useState, } from 'react'\r\nimport { bool, } from 'prop-types'\r\nimport {\r\n Row,\r\n Col,\r\n Button,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n Alert,\r\n} from 'reactstrap'\r\nimport { useSelector, } from 'react-redux'\r\nimport { Link, useNavigate, } from 'react-router-dom'\r\n\r\n// Selectors\r\nimport { lastRouteSelector, } from '../../../selectors/appSelectors'\r\n\r\n// Hooks\r\nimport useInterval from '../../../hooks/useInterval'\r\n\r\n\r\nconst NoPermitModal = (props) => {\r\n const { isOpen, } = props\r\n\r\n // Hooks\r\n const navigate = useNavigate()\r\n\r\n // State\r\n const [ seconds, setSeconds, ] = useState(5)\r\n const [ countdown, startCountdown, ] = useState(false)\r\n\r\n // Selectors\r\n const lastRoute = useSelector(lastRouteSelector)\r\n\r\n const interval = useMemo(() => countdown ? 1000 : null, [ countdown, ])\r\n\r\n useInterval(() => {\r\n const secondsRemaining = seconds - 1\r\n setSeconds(secondsRemaining)\r\n if (secondsRemaining < 1) {\r\n navigate(lastRoute)\r\n }\r\n }, interval)\r\n\r\n const okClick = useCallback(() => navigate(lastRoute), [ navigate, lastRoute, ])\r\n\r\n useEffect(() => {\r\n if (isOpen && lastRoute) {\r\n startCountdown(true)\r\n }\r\n }, [ startCountdown, isOpen, lastRoute, ])\r\n\r\n // Memoed values\r\n const redirectToUrl = useMemo(() => {\r\n let url = ''\r\n if (lastRoute) {\r\n url = window.location.origin + lastRoute\r\n }\r\n return url\r\n }, [ lastRoute, ])\r\n\r\n const secondsText = useMemo(() => {\r\n let text = `${seconds} second`\r\n if (seconds > 1) {\r\n text += 's'\r\n }\r\n return text\r\n }, [ seconds, ])\r\n\r\n return \r\n \r\n If the debris you want to burn is from an improved property, you do not need a burn permit from the\r\n Department of Natural Resources. You may, however, need a permit from your local clean air agency.\r\n \r\n \r\n {\r\n lastRoute\r\n ? \r\n \r\n \r\n You will now be redirected to {redirectToUrl}\r\n  in {secondsText}.\r\n \r\n \r\n \r\n Go now\r\n \r\n \r\n : OK\r\n }\r\n \r\n \r\n}\r\n\r\nNoPermitModal.defaultProps = {\r\n isOpen: false,\r\n}\r\n\r\nNoPermitModal.propTypes = {\r\n isOpen: bool,\r\n}\r\n\r\nexport default React.memo(NoPermitModal)","// Libraries\r\nimport React, { useCallback, useMemo, useRef, useState, } from 'react'\r\nimport ImageGallery from 'react-image-gallery'\r\nimport {\r\n Card,\r\n CardBody,\r\n CardText,\r\n} from 'reactstrap'\r\n\r\n// Components\r\nimport ExternalLink from '../../ExternalLink'\r\n\r\nconst imageDir = '/images/property/improved'\r\nconst defaultOriginalHeight = 350\r\n\r\nconst ImprovedPropertyCard = () => {\r\n\r\n const [ originalHeight, setOriginalHeight, ] = useState(defaultOriginalHeight)\r\n const [ imageIdx, setImageIdx, ] = useState(0)\r\n\r\n const galleryRef = useRef()\r\n\r\n const setGalleryRef = useCallback(node => {\r\n if (node) {\r\n galleryRef.current = node\r\n }\r\n return () => {\r\n if (galleryRef && galleryRef.current) {\r\n galleryRef.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n const screenChange = useCallback(isFullScreen => {\r\n let newHeight = defaultOriginalHeight\r\n if (isFullScreen) {\r\n newHeight = null\r\n }\r\n setOriginalHeight(newHeight)\r\n galleryRef.current.slideToIndex(imageIdx)\r\n }, [ imageIdx, ])\r\n\r\n const images = useMemo(() => ([\r\n {\r\n fullscreen : `${imageDir}/DownriverGolfCourse/downriver-golf-course.jpg`,\r\n original : `${imageDir}/DownriverGolfCourse/downriver-golf-course_350.jpg`,\r\n thumbnail : `${imageDir}/DownriverGolfCourse/downriver-golf-course_tn.jpg`,\r\n originalHeight,\r\n },\r\n {\r\n fullscreen : `${imageDir}/SpokaneCityParksRec/CityPark.jpg`,\r\n original : `${imageDir}/SpokaneCityParksRec/CityPark_350.jpg`,\r\n thumbnail : `${imageDir}/SpokaneCityParksRec/CityPark_tn.jpg`,\r\n originalHeight,\r\n },\r\n {\r\n fullscreen : `${imageDir}/SpokaneCityParksRec/ComstockPark.jpg`,\r\n original : `${imageDir}/SpokaneCityParksRec/ComstockPark_350.jpg`,\r\n thumbnail : `${imageDir}/SpokaneCityParksRec/ComstockPark_tn.jpg`,\r\n originalHeight,\r\n },\r\n ]), [ originalHeight, ])\r\n\r\n const ecology = useMemo(() => (\r\n \r\n ), [])\r\n\r\n return <>\r\n

    Improved Property

    \r\n \r\n \r\n Is the debris you want to burn from an improved property?\r\n \r\n If your burnable debris comes from property as seen in these pictures, \r\n it is more than likely not permittable by Department of Natural Resources. \r\n Please contact your local City or County Fire District for help. \r\n You can also review {ecology} for the Department of Ecology for further help and information.\r\n \r\n \r\n \r\n \r\n \r\n}\r\n\r\nexport default React.memo(ImprovedPropertyCard)","// Libraries\r\nimport React, { useCallback, useMemo, useState, useRef, } from 'react'\r\nimport ImageGallery from 'react-image-gallery'\r\nimport {\r\n Card,\r\n CardBody,\r\n CardText,\r\n} from 'reactstrap'\r\n\r\nconst imageDir = '/images/property/unimproved'\r\nconst defaultOriginalHeight = 350\r\n\r\nconst UnimprovedPropertyCard = () => {\r\n\r\n const [ originalHeight, setOriginalHeight, ] = useState(defaultOriginalHeight)\r\n const [ imageIdx, setImageIdx, ] = useState(0)\r\n\r\n const galleryRef = useRef()\r\n\r\n const setGalleryRef = useCallback(node => {\r\n if (node) {\r\n galleryRef.current = node\r\n }\r\n return () => {\r\n if (galleryRef && galleryRef.current) {\r\n galleryRef.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n const screenChange = useCallback(isFullScreen => {\r\n let newHeight = defaultOriginalHeight\r\n if (isFullScreen) {\r\n newHeight = null\r\n }\r\n setOriginalHeight(newHeight)\r\n galleryRef.current.slideToIndex(imageIdx)\r\n }, [ imageIdx, ])\r\n\r\n const images = useMemo(() => ([\r\n {\r\n original : `${imageDir}/SONH_04_350.jpg`,\r\n originalHeight,\r\n thumbnail : `${imageDir}/SONH_04_tn.jpg`,\r\n fullscreen : `${imageDir}/SONH_04.jpg`,\r\n },\r\n {\r\n original : `${imageDir}/EOSP_04_350.jpg`,\r\n originalHeight,\r\n thumbnail : `${imageDir}/EOSP_04_tn.jpg`,\r\n fullscreen : `${imageDir}/EOSP_04.jpg`,\r\n },\r\n {\r\n original : `${imageDir}/EOSG_04_350.jpg`,\r\n originalHeight,\r\n thumbnail : `${imageDir}/EOSG_04_tn.jpg`,\r\n fullscreen : `${imageDir}/EOSG_04.jpg`,\r\n },\r\n ]), [ originalHeight, ])\r\n\r\n return <>\r\n

    Unimproved Property

    \r\n \r\n \r\n Is the debris you want to burn from an unimproved property?\r\n \r\n If your burnable debris comes from property as seen in these pictures, \r\n it is likely permittable by Department of Natural Resources.\r\n \r\n \r\n \r\n \r\n \r\n}\r\n\r\nexport default React.memo(UnimprovedPropertyCard)","// Libraries\r\nimport React, { useCallback, useState, } from 'react'\r\nimport {\r\n Container,\r\n Row,\r\n Col,\r\n Button,\r\n Card,\r\n CardBody,\r\n CardText,\r\n} from 'reactstrap'\r\nimport { func, } from 'prop-types'\r\n\r\n// Components\r\nimport NoPermitModal from './NoPermitModal'\r\nimport ImprovedPropertyCard from './ImprovedPropertyCard'\r\nimport UnimprovedPropertyCard from './UnimprovedPropertyCard'\r\n\r\n\r\nconst DoYouNeedABurnPermit = props => {\r\n const { yesCallback, } = props\r\n\r\n // State\r\n const [ isModalVisible, setIsModalVisible, ] = useState(false)\r\n const [ improvedVisible, setImprovedVisible, ] = useState(false)\r\n const [ unimprovedVisible, setUnimprovedVisible, ] = useState(false)\r\n\r\n // UI Callbacks\r\n const isUnimprovedProperty = useCallback(() => {\r\n if (typeof yesCallback === 'function') {\r\n yesCallback()\r\n }\r\n }, [ yesCallback, ])\r\n\r\n const isImprovedProperty = useCallback(() => setIsModalVisible(true), [])\r\n\r\n const showImproved = useCallback(() => setImprovedVisible(true), [])\r\n const showUnimproved = useCallback(() => setUnimprovedVisible(true), [])\r\n const back = useCallback(() => {\r\n setImprovedVisible(false)\r\n setUnimprovedVisible(false)\r\n }, [])\r\n\r\n let markup = null\r\n if (!improvedVisible && !unimprovedVisible) {\r\n markup = <>\r\n

    Do you need a Burn Permit from us?

    \r\n \r\n \r\n \r\n \r\n \r\n Department of Natural Resources issues Burn Permits for individuals or companies that have \r\n collected or harvested brush, timber, etc. from unimproved properties; such as grasslands \r\n and forests.\r\n \r\n \r\n If you are not sure if the material you need to burn is on a property that is improved or \r\n unimproved, click the buttons below to review examples of each.\r\n \r\n
    \r\n Improved\r\n Unimproved\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n No\r\n Yes\r\n
    \r\n \r\n \r\n
    \r\n \r\n }\r\n else if (improvedVisible) {\r\n markup = \r\n }\r\n else if (unimprovedVisible) {\r\n markup = \r\n }\r\n\r\n if (improvedVisible || unimprovedVisible) {\r\n markup = <>\r\n {markup}\r\n \r\n \r\n }\r\n\r\n return \r\n {markup}\r\n \r\n}\r\n\r\nDoYouNeedABurnPermit.propTypes = {\r\n yesCallback: func,\r\n}\r\n\r\nexport default React.memo(DoYouNeedABurnPermit)","// Libraries\r\nimport React, { useCallback, useMemo, } from 'react'\r\nimport { useSelector, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { func, } from 'prop-types'\r\nimport {\r\n Button,\r\n Card,\r\n CardBody,\r\n CardHeader,\r\n CardText,\r\n Col,\r\n Container,\r\n Row,\r\n} from 'reactstrap'\r\n\r\n// Selectors\r\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\r\n\r\n// Components\r\nimport ExternalLink from '../../ExternalLink'\r\nimport { PopoverButton, } from '../../FormControls'\r\n\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_BLANK_PERMIT_APPLICATION_DOWNLOAD, } = process.env\r\n\r\nconst ApplicationMethods = props => {\r\n\r\n const { applyOnlineCallback, } = props\r\n\r\n // Selectors\r\n const online = useSelector(appIsOnlineSelector)\r\n\r\n // UI Callbacks\r\n const applyOnline = useCallback(() => {\r\n if (typeof applyOnlineCallback === 'function') {\r\n applyOnlineCallback()\r\n }\r\n }, [ applyOnlineCallback, ])\r\n\r\n // Memoed values\r\n const downloadOnlineOnly = useMemo(() => {\r\n let markup = null\r\n if (online !== true) {\r\n markup = \r\n }\r\n return markup\r\n }, [ online, ])\r\n\r\n const downloadLink = useMemo(() => {\r\n return \r\n }, [ online, ])\r\n\r\n const sawLink = useMemo(() => {\r\n return \r\n }, [])\r\n\r\n return \r\n

    Application Methods

    \r\n \r\n \r\n \r\n Paper Application\r\n \r\n \r\n Would you rather fill out a paper application?\r\n \r\n \r\n You will have to either walk-in or mail-in the application to the appropriate \r\n Region office and pay by check.\r\n \r\n \r\n Click the link below to download a blank permit application to print.\r\n {downloadOnlineOnly}\r\n \r\n \r\n
    \r\n {downloadLink}\r\n
    \r\n
    \r\n \r\n \r\n \r\n Apply Online\r\n \r\n \r\n Applying online using your {sawLink} results in faster Permit Application processing time.\r\n \r\n \r\n You can pay for your Permit Application online and digitally sign the Permit Application.\r\n \r\n \r\n Click Apply Online below to begin the process and review the steps in more detail.\r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n}\r\n\r\nApplicationMethods.propTypes = {\r\n applyOnlineCallback: func,\r\n}\r\n\r\nexport default React.memo(ApplicationMethods)","// Libraries\r\nimport React, { useEffect, useMemo, } from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { useNavigate, } from 'react-router-dom'\r\nimport {\r\n Container,\r\n Row,\r\n Col,\r\n Card,\r\n CardBody,\r\n CardText,\r\n} from 'reactstrap'\r\n\r\n// Actions\r\nimport BurnPermitFormActions from '../../../redux/BurnPermitFormRedux'\r\n\r\n// Selectors\r\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\r\nimport { activeBurnPermitIdSelector, } from '../../../selectors/burnPermitSelectors'\r\n\r\n\r\nconst LoadingApplication = () => {\r\n\r\n // Hooks\r\n const dispatch = useDispatch()\r\n const navigate = useNavigate()\r\n\r\n // Selectors\r\n const online = useSelector(appIsOnlineSelector)\r\n const activeBurnPermitId = useSelector(activeBurnPermitIdSelector)\r\n\r\n // DidMount\r\n useEffect(() => {\r\n dispatch(BurnPermitFormActions.createPermitApplication())\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n // DidUpdate\r\n useEffect(() => {\r\n if (Number.isInteger(activeBurnPermitId)) {\r\n navigate(`/permits/${activeBurnPermitId}`)\r\n }\r\n }, [ navigate, activeBurnPermitId, ])\r\n\r\n // Memoed values\r\n const loadingAppContainerSize = useMemo(() => ({ size: 6, offset: 3, }), [])\r\n\r\n return \r\n \r\n \r\n \r\n \r\n Loading Application...\r\n {\r\n !online && \r\n You are creating a Burn Permit Application while offline.\r\n
    Once you regain internet connectivity, all data saved while offline will be automatically submitted.\r\n
    \r\n }\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n}\r\n\r\nexport default React.memo(LoadingApplication)","// Libraries\r\nimport React, { useEffect, useState, useCallback, useMemo, } from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { useNavigate, } from 'react-router-dom'\r\nimport { bool, } from 'prop-types'\r\nimport { Row, Col, Container, } from 'reactstrap'\r\n\r\n// Actions\r\nimport BurnPermitInstructionsActions from '../../../redux/BurnPermitInstructionsRedux'\r\nimport BurnPermitFormActions from '../../../redux/BurnPermitFormRedux'\r\nimport AppActions from '../../../redux/AppRedux'\r\n\r\n// Components\r\nimport PermitFailedToLoad from '../PermitFailedToLoad'\r\nimport AgentUnverified from '../../AgentUnverified'\r\nimport ProfileStatus from '../../Profile/ProfileStatus'\r\nimport HowToApply from './HowToApply'\r\nimport DoYouNeedABurnPermit from './DoYouNeedABurnPermit'\r\nimport ApplicationMethods from './ApplicationMethods'\r\nimport LoadingApplication from './LoadingApplication'\r\n\r\n// Selectors\r\nimport { profileStatusSelector, } from '../../../selectors/userSelectors'\r\nimport { userAcknowledgedInstructions, } from '../../../selectors/instructionsSelectors'\r\n\r\n\r\nconst CreateBurnPermit = props => {\r\n const {\r\n isDnr,\r\n isAuthenticated,\r\n isUnverifiedAgent,\r\n } = props\r\n\r\n // State\r\n const [ answeredPropertyQuestion, setIsUnimprovedProperty, ] = useState(false)\r\n const [ showApplicationMethods, setShowApplicationMethods, ] = useState(false)\r\n const [ showInstructions, setShowInstructions, ] = useState(false)\r\n const [ isCreatingApplication, setCreateApplication, ] = useState(false)\r\n\r\n // Hooks\r\n const dispatch = useDispatch()\r\n const navigate = useNavigate()\r\n\r\n // Selectors\r\n const instructionsAcknowledged = useSelector(userAcknowledgedInstructions)\r\n const profileStatus = useSelector(profileStatusSelector)\r\n\r\n // OnMount\r\n useEffect(() => {\r\n dispatch(BurnPermitInstructionsActions.goToInstructionStep('Apply'))\r\n if (isDnr) {\r\n setIsUnimprovedProperty(true)\r\n setCreateApplication(true)\r\n }\r\n // Clear the active Burn Permit\r\n dispatch(BurnPermitFormActions.activeBurnPermit(''))\r\n dispatch(AppActions.setPageTitle('Apply for Burn Permit'))\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n // DidUpdate\r\n useEffect(() => {\r\n if (instructionsAcknowledged) {\r\n setIsUnimprovedProperty(true)\r\n setCreateApplication(true)\r\n }\r\n }, [ instructionsAcknowledged, ])\r\n\r\n // UI Callbacks\r\n const isUnimprovedProperty = useCallback(() => {\r\n setIsUnimprovedProperty(true)\r\n if (instructionsAcknowledged || isDnr) {\r\n setCreateApplication(true)\r\n return\r\n }\r\n setShowApplicationMethods(true)\r\n }, [ instructionsAcknowledged, isDnr, ])\r\n\r\n const applyOnline = useCallback(() => {\r\n if (isAuthenticated !== true) {\r\n navigate('/login')\r\n return\r\n }\r\n setShowApplicationMethods(false)\r\n setShowInstructions(true)\r\n }, [ navigate, isAuthenticated, ])\r\n\r\n const understand = useCallback(() => {\r\n setShowInstructions(false)\r\n setCreateApplication(true)\r\n }, [])\r\n\r\n // Memoed values\r\n const profileStatusContainerSize = useMemo(() => ({ size: 8, offset: 2, }), [])\r\n\r\n // This is the general order to check for ability to apply\r\n // as well as the flow through the application screening and instructions\r\n if (profileStatus.IsComplete === false) {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n if (isUnverifiedAgent) {\r\n return \r\n }\r\n if (answeredPropertyQuestion === false) {\r\n return \r\n }\r\n if (showApplicationMethods) {\r\n return \r\n }\r\n if (showInstructions) {\r\n return \r\n }\r\n if (isCreatingApplication) {\r\n return \r\n }\r\n\r\n return \r\n}\r\n\r\nCreateBurnPermit.propTypes = {\r\n isDnr : bool,\r\n isAuthenticated : bool,\r\n isUnverifiedAgent : bool,\r\n}\r\n\r\nCreateBurnPermit.defaultProps = {\r\n isDnr : false,\r\n isAuthenticated : false,\r\n isUnverifiedAgent : false,\r\n}\r\n\r\nexport default React.memo(CreateBurnPermit)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Formik, Field, } from 'formik'\nimport { array, func, bool, string, number, object, } from 'prop-types'\nimport { Card, CardBody, Row, Col, Label, Button, Badge, FormGroup, ButtonGroup, } from 'reactstrap'\n\n// Components\nimport { BurnPermitFormSection, } from '.'\nimport { Select, ValidatingField, } from '../FormControls'\nimport { ForestHealthDocAlert, } from '../Alerts'\n\n// Reducers\nimport ForestHealthActions from '../../redux/ForestHealthRedux'\n\n// Selectors\nimport { permitForestHealthData, problemTypesSelector, permitNeedsForestHealthDoc, } from '../../selectors/forestHealthSelectors'\nimport { modelValidationSchemaSelector, } from '../../selectors/modelSelectors'\nimport { userCanReviewFHExemption, } from '../../selectors/burnPermitPermissionSelectors'\n\n// Utilities\nimport { dateFormatter, } from '../../utilities'\nimport stopEvent from '../../utilities/stopEvent'\n\n\nclass ForestHealthExemptionSection extends React.Component {\n\n constructor (props) {\n super(props)\n\n this.validateSection = this.validateSection.bind(this)\n this.submit = this.submit.bind(this)\n this.setFormikNode = this.setFormikNode.bind(this)\n }\n\n static propTypes = {\n title : string,\n online : bool,\n sectionId : number,\n burnPermitId : number,\n ProblemTypes : array,\n readOnly : bool,\n forestHealthData : object,\n valSchema : object,\n isSigned : bool,\n showSaveControls : bool,\n canReviewExemption : bool,\n needsForestHealthDoc : bool,\n GetForestHealthData : func,\n CreateForestHealthData : func,\n UpdateForestHealthData : func,\n userCanReviewExemption : bool,\n isActive : bool,\n }\n\n componentDidMount () {\n const { forestHealthData, isActive, } = this.props\n if (isActive && forestHealthData && forestHealthData.ForestHealthExemptId) {\n this.props.GetForestHealthData(forestHealthData.ForestHealthExemptId)\n }\n }\n\n componentDidUpdate (prevProps) {\n if (prevProps.isActive !== true && this.props.isActive === true && this.props.forestHealthData) {\n this.props.GetForestHealthData(this.props.forestHealthData.ForestHealthExemptId)\n }\n }\n\n async validateSection ({ evt, submit = true, }) {\n if (evt) {\n stopEvent(evt)\n }\n if (this.formik) {\n const errs = await this.formik.validateForm()\n const isValid = !errs || Object.keys(errs).length === 0\n if (isValid && submit) {\n this.formik.submitForm()\n }\n return isValid\n }\n return false\n }\n\n submit (values) {\n if (!values.ForestHealthExemptId) {\n this.props.CreateForestHealthData(this.props.burnPermitId, values)\n }\n else {\n this.props.UpdateForestHealthData(this.props.burnPermitId, values.ForestHealthExemptId, values)\n }\n }\n\n setFormikNode (node) {\n this.formik = node\n }\n \n render () {\n const { title, online, canReviewExemption, sectionId, readOnly, forestHealthData, showSaveControls, needsForestHealthDoc, valSchema, userCanReviewExemption, } = this.props\n \n return }\n showSaveControls={showSaveControls || canReviewExemption}\n >\n \n \n { needsForestHealthDoc && }\n { !online &&

    You cannot edit exemption data while offline.

    }\n \n {({ values, }) => (\n <>\n \n \n \n \n {({ field, form, }) => (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n {\n userCanReviewExemption && canReviewExemption &&\n \n \n \n
    \n \n {({ field, form, }) => (\n \n \n \n \n )}\n \n
    \n \n }\n { values.ForestHealthExemptionApprovalFlag === false \n ? \n \n \n \n : values.ForestHealthExemptionApprovalBy &&\n \n Approved By: {values.ForestHealthExemptionApprovalBy}
    \n Approved On: {dateFormatter(values.ForestHealthExemptionApprovalDate, 'MM-DD-YYYY hh:mm:ss a')}\n \n }\n
    \n \n )}\n \n
    \n
    \n \n }\n}\n\nconst mapStateToProps = (state, props) => {\n\n // DNR Users can Approve/Deny the Forest Health Exemption value if the application is not Pending\n const userCanReviewExemption = userCanReviewFHExemption(state)\n const canReviewExemption = props.showSaveControls || (userCanReviewExemption && props.applicationStatus !== 'Pending')\n\n const { online, } = state.offline\n const { applications, activeBurnPermitId, } = state.BurnPermitForm\n const isActive = applications[activeBurnPermitId].activeStep === props.sectionId\n return {\n online,\n isActive,\n canReviewExemption,\n valSchema : modelValidationSchemaSelector(state, 'ForestHealthExempt'),\n ProblemTypes : problemTypesSelector(state),\n forestHealthData : permitForestHealthData(state, props.burnPermitId),\n needsForestHealthDoc : permitNeedsForestHealthDoc(state, props.burnPermitId),\n userCanReviewExemption,\n }\n}\n\nconst mapDispatchToProps = {\n GetForestHealthData : ForestHealthActions.getForestHealthData,\n CreateForestHealthData : ForestHealthActions.createForestHealthData,\n UpdateForestHealthData : ForestHealthActions.updateForestHealthData,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ForestHealthExemptionSection) ","import React from 'react'\nimport { func, number, array, string, } from 'prop-types'\nimport { Button, ButtonGroup, } from 'reactstrap'\n\n\nconst Nav = (props) => {\n const dots = []\n let dot\n for (let i = 0; i < props.totalSteps; i++) {\n const isActive = props.currentStep === i\n let icon = 'far fa-circle', color = 'disabled'\n if (isActive) {\n icon = 'fas fa-circle'\n color = 'primary'\n }\n if (props.status === 'Complete' || props.completedSteps.includes(i + 1)) {\n icon = 'fas fa-check-circle'\n color = 'primary'\n }\n else if (props.status === 'Invalid' || props.invalidSteps.includes(i + 1)) {\n icon = 'fas fa-times-circle'\n color = 'danger'\n }\n \n dot = props.goToStep(i)}\n className={`p-2 ${isActive ? 'active': ''}`}\n >\n \n

    {props.labels[i]}

    \n \n dots.push(dot)\n }\n\n return {dots}\n}\n\nNav.propTypes = {\n completedSteps : array.isRequired,\n invalidSteps : array.isRequired,\n currentStep : number.isRequired,\n labels : array.isRequired,\n totalSteps : number.isRequired,\n goToStep : func.isRequired,\n status : string,\n}\n\nexport default Nav","// Libraries\nimport React, { useMemo, } from 'react'\nimport { object, bool, func, string, } from 'prop-types'\nimport { Col, Row, } from 'reactstrap'\n\n// Components\nimport { RowToggler, } from '../FormControls'\n\n\nconst HeaderComp = ({ statusName, }) => {\n return

    \n Permit Status:\n {statusName}\n

    \n}\nHeaderComp.propTypes = {\n statusName: string,\n}\n\nconst Header = React.memo(HeaderComp)\n\nconst StatusHeader = props => {\n const {\n appStatus,\n isSigned,\n isSuspended,\n isRevoked,\n isExpired,\n toggleApplicationSummary,\n applicationSummaryIsShowing,\n headerOnly,\n enableToggler,\n enableSummary,\n } = props\n\n const { statusName, statusDesc, } = useMemo(() => {\n let statusName = null, statusDesc = null\n if (isSuspended) {\n statusName = 'Suspended'\n statusDesc = 'Permit has been suspended and can not be used for burning at this time.'\n }\n else if (isRevoked) {\n statusName = 'Revoked'\n statusDesc = 'Permit has been revoked and can no longer be used for burning.'\n }\n else if (isExpired) {\n statusName = 'Expired'\n statusDesc = 'Permit has expired and can no longer be used for burning.'\n }\n else if (appStatus) {\n statusName = appStatus.Status\n statusDesc = appStatus.StatusDescription\n }\n return { statusName, statusDesc, }\n }, [ isSuspended, isRevoked, isExpired, appStatus, ])\n\n const showHeader = useMemo(() => (!!statusName && !!statusDesc), [ statusName, statusDesc, ])\n\n const showSummaryOrToggler = useMemo(() => (enableSummary || enableToggler), [ enableSummary, enableToggler, ])\n\n const markup = useMemo(() => {\n if (showSummaryOrToggler !== true) {\n return null\n }\n let markup = []\n if (enableToggler) {\n markup.push(\n \n )\n }\n if (enableSummary && applicationSummaryIsShowing) {\n markup.push(\n
    \n

    {statusName}: {statusDesc}

    \n {\n isSigned &&

    This application has been digitally signed. See the Signature section below for more information.

    \n }\n
    \n )\n }\n return \n \n {markup}\n \n \n }, [\n showSummaryOrToggler,\n enableToggler,\n enableSummary,\n toggleApplicationSummary,\n applicationSummaryIsShowing,\n statusName,\n statusDesc,\n isSigned,\n ])\n\n if (!appStatus || showHeader !== true) {\n return null\n }\n\n if (headerOnly === true) {\n return
    \n }\n\n return <>\n \n \n
    \n \n \n {markup}\n \n}\n\nStatusHeader.propTypes = {\n appStatus : object,\n isSigned : bool,\n isSuspended : bool,\n isRevoked : bool,\n isExpired : bool,\n toggleApplicationSummary : func,\n applicationSummaryIsShowing : bool,\n headerOnly : bool,\n enableToggler : bool,\n enableSummary : bool,\n}\n\nStatusHeader.defaultProps = {\n appStatus : {},\n isSigned : false,\n isSuspended : false,\n isRevoked : false,\n isExpired : false,\n toggleApplicationSummary : () => {},\n applicationSummaryIsShowing : false,\n headerOnly : false,\n enableToggler : true,\n enableSummary : true,\n}\n\nexport default StatusHeader\n","// Libraries\nimport React from 'react'\nimport { bool, string, number, PropTypes, } from 'prop-types'\nimport { Row, Col, Badge, } from 'reactstrap'\n\n// Components\nimport { PopoverButton, } from '../FormControls'\nimport PermitFeePopover from '../PermitFeePopover'\n\nconst TonnageSection = props => {\n \n const { EstimatedFee, TotalPermitTonnage, online, } = props\n\n let estFee, totalTonnage = 0\n if (online) {\n if (EstimatedFee) {\n estFee = `$${EstimatedFee.toLocaleString()}`\n }\n if (TotalPermitTonnage) {\n totalTonnage = TotalPermitTonnage.toLocaleString()\n }\n }\n else {\n if (!EstimatedFee) {\n estFee = 'Fee calculation requires an internet connection'\n } \n if (!TotalPermitTonnage) {\n totalTonnage = 'Tonnage calculation requires an internet connection'\n }\n }\n \n return \n \n
    \n

    \n Tonnage:\n {totalTonnage}\n

    \n Total estimated tons of consumed fuel from the Pile Groups Estimated Consumed Fuel, broadcast, and natural fuel loadings, if applicable.

    }\n />\n
    \n \n \n
    \n

    \n Est. Fee:\n {(estFee || '$0.00')}\n

    \n \n
    \n \n
    \n}\n\nTonnageSection.propTypes = {\n EstimatedFee : PropTypes.oneOfType([ number, string, ]),\n TotalPermitTonnage : PropTypes.oneOfType([ number, string, ]),\n totalTonnage : string,\n showFee : bool,\n online : bool,\n}\n\nexport default TonnageSection","// Libraries\nimport React, { useEffect, useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport {\n Container,\n Row,\n Col,\n Card,\n CardHeader,\n CardBody,\n CardText,\n} from 'reactstrap'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\n\n// Selectors\nimport { lastRouteSelector, } from '../selectors/appSelectors'\n \n/**\n * Inspired by the 404 page for www.dnr.wa.gov that can be demoed here: https://www.dnr.wa.gov/a\n */\nconst NotFound = () => {\n const lastRoute = useSelector(lastRouteSelector)\n const dispatch = useDispatch()\n\n useEffect(() => {\n dispatch(AppActions.setPageTitle('Page Not Found'))\n }, [ dispatch, ])\n\n const colSizes = useMemo(() => ({ size: '6', offset: '3', }), [])\n\n return (\n \n \n \n \n 404 Error (Page Not Found)\n \n \n {'You\\'ve'} taken the road less traveled.\n
    {'Let\\'s'} get you back on track.\n
    \n
    \n Back to where you were\n Go to the Home Page\n
    \n
    \n
    \n \n
    \n
    \n )\n}\n\nexport default React.memo(NotFound)\n","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { array, object, func, number, bool, } from 'prop-types'\r\nimport { Row, Col, Button, } from 'reactstrap'\r\nimport { Link, } from 'react-router-dom'\r\n\r\n// Selectors\r\nimport { permitsByIds, } from '../../selectors/burnPermitSelectors'\r\n\r\n// Utilities\r\nimport { currencyFormatter, } from '../../utilities'\r\n\r\n// Components\r\nimport PermitFeePopover from '../PermitFeePopover'\r\nimport ExternalLink from '../ExternalLink'\r\n\r\nclass BurnPermitCartSummary extends React.Component {\r\n\r\n static propTypes = {\r\n OrderId : number,\r\n permits : array,\r\n order : object,\r\n RemovePermitFromOrder : func,\r\n ShowModal : func,\r\n usePopover : bool,\r\n orderHasPayment : bool,\r\n BurnPermitOrderAmount : number,\r\n }\r\n\r\n static defaultProps = {\r\n usePopover: true,\r\n }\r\n \r\n render () {\r\n const { permits, usePopover, orderHasPayment, BurnPermitOrderAmount, } = this.props\r\n let totalEstFee = 0.0, showDelete = permits.length > 1, orderXref, landowner, agent, unitName\r\n let totalEstTonnage = 0.0\r\n return \r\n \r\n {\r\n orderHasPayment || !showDelete\r\n ? Permit ID\r\n : Permit ID\r\n }\r\n Landowner / Agent\r\n Unit\r\n Tonnage\r\n Est. Fee\r\n \r\n { \r\n permits.map(p => {\r\n totalEstTonnage += p.TotalPermitTonnage\r\n totalEstFee += p.BurnPermitEstimatedFee\r\n orderXref = p.BurnPermitOrderXrefs.first()\r\n unitName = p.BurnPermitSite ? p.BurnPermitSite.BurnUnitName : ''\r\n if (orderXref) {\r\n if (orderXref.BurnUnitName && orderXref.BurnUnitName !== unitName) {\r\n unitName = orderXref.BurnUnitName\r\n }\r\n const burner = orderXref.Burner || orderXref.BurnPermit.Burner || p.Burner\r\n const agency = orderXref.Agency || orderXref.BurnPermit.Agency || p.Agency\r\n const permitAgent = orderXref.Agent || orderXref.BurnPermit.Agent || p.Agent\r\n if (burner) {\r\n landowner = `Landowner: ${(burner || '')}`\r\n }\r\n else if (agency) {\r\n landowner = `Landowner: ${(agency || '')}`\r\n }\r\n if (permitAgent) {\r\n agent = `Agent: ${(permitAgent || '')}`\r\n }\r\n }\r\n else {\r\n landowner = `Landowner: ${(p.Burner || p.Agency || '')}`\r\n agent = `Agent: ${(p.Agent || '')}`\r\n }\r\n return \r\n \r\n {\r\n !orderHasPayment && showDelete &&\r\n \r\n }\r\n {p.BurnPermitId}\r\n \r\n { landowner &&
    {landowner}
    }\r\n { agent &&
    {agent}
    }\r\n \r\n
    {unitName}
    \r\n {p.TotalPermitTonnage}\r\n {currencyFormatter.format(p.BurnPermitEstimatedFee)}\r\n
    \r\n })\r\n }\r\n \r\n \r\n Total\r\n \r\n \r\n {totalEstTonnage.toLocaleString()}\r\n \r\n \r\n {currencyFormatter.format(BurnPermitOrderAmount || totalEstFee)}\r\n \r\n \r\n {\r\n Number.isFinite(BurnPermitOrderAmount) && totalEstFee !== BurnPermitOrderAmount\r\n ? \r\n \r\n Why do these numbers not add up?\r\n { usePopover\r\n ? \r\n : Check out the .\r\n }\r\n \r\n \r\n : null\r\n }\r\n \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n return { \r\n permits: permitsByIds(state, props.BurnPermitIds),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, null)(BurnPermitCartSummary)","// Libraries\r\nimport React from 'react'\r\nimport { Formik, Field, ErrorMessage, Form, } from 'formik'\r\nimport { Row, Col, FormGroup, Label, FormFeedback, Button, } from 'reactstrap'\r\nimport { object, func, bool, string, PropTypes, } from 'prop-types'\r\n\r\n// Utilities\r\nimport { dateFormatter, } from '../../utilities'\r\n\r\n// Components\r\nimport AuditData from '../AuditData'\r\nimport ValidatingField from '../FormControls/ValidatingField'\r\n\r\n// Models\r\nimport BurnPermitOrder from '../../models/BurnPermitOrder'\r\n\r\n\r\nconst CASH_METHOD = 'Third Party Payments (ACH Credit, POS, Cash)'\r\nconst PAYMENT_METHODS = [ { name: 'Cash', method: CASH_METHOD, }, { name: 'Check', method: 'Check', }, { name: 'Voucher', method: 'Voucher', }, ]\r\n\r\n\r\nconst PaymentMethod = props => {\r\n const { method, errors, onChange, } = props\r\n return <>\r\n \r\n {({ field, }) => (\r\n \r\n )}\r\n \r\n {method.name}\r\n \r\n}\r\n\r\nPaymentMethod.propTypes = {\r\n method : object,\r\n errors : object,\r\n onChange : func,\r\n}\r\n\r\nPaymentMethod.defaultProps = {\r\n method : {},\r\n errors : {},\r\n onChange : () => {},\r\n}\r\n\r\nexport default class PhysicalPaymentForm extends React.Component {\r\n\r\n static propTypes = {\r\n order : object,\r\n appDetail : object,\r\n onSubmit : func,\r\n eligibleForVoucherPayment : PropTypes.oneOfType([ bool, string, ]),\r\n eligableForCashCheckPayment : bool,\r\n }\r\n\r\n static defaultProps = {\r\n order : null,\r\n appDetail : null,\r\n onSubmit : () => {},\r\n eligableForCashCheckPayment : false,\r\n }\r\n\r\n state = {\r\n isVoucher: false,\r\n }\r\n\r\n onKeyPress = (evt) => {\r\n if (evt.charCode === 13) {\r\n this.formik.submitForm()\r\n }\r\n }\r\n\r\n changePaymentMethod = evt => {\r\n const { method, }= evt.target.dataset\r\n const { order, } = this.props\r\n const isVoucher = method === 'Voucher'\r\n this.setState({ isVoucher, }, () => {\r\n let values = {\r\n FirstName : '',\r\n LastName : '',\r\n CheckDate : '',\r\n CheckNumber : '',\r\n TotalAmountPaid : '',\r\n PaymentMethod : method,\r\n BurnPermitOrderId : '',\r\n PaymentCommandCode : 'Payment',\r\n TransactionDate : new Date(),\r\n VoucherNumber : '',\r\n VoucherDate : '',\r\n Comment : '',\r\n BurnPermitIds : [],\r\n }\r\n if (order) {\r\n values.BurnPermitOrderId = order.BurnPermitOrderId\r\n values.BurnPermitIds = order.BurnPermitOrderXref.map(x => x.BurnPermitId)\r\n if (order.ApplicationDetail && method === order.ApplicationDetail.PaymentMethod) {\r\n values = this.mapOrderToFormikValues()\r\n }\r\n }\r\n this.formik.resetForm({ values, })\r\n })\r\n }\r\n\r\n getPrefix = (method) => {\r\n if (method === 'Check') {\r\n return method\r\n }\r\n else if (method === 'Voucher') {\r\n return method\r\n }\r\n return 'Payment'\r\n }\r\n\r\n getPaymentMethods = () => {\r\n const { eligibleForVoucherPayment, eligableForCashCheckPayment, } = this.props\r\n let paymentMethods = PAYMENT_METHODS\r\n if (!eligibleForVoucherPayment){\r\n paymentMethods = paymentMethods.filter(m => m.name !== 'Voucher')\r\n }\r\n else {\r\n paymentMethods = paymentMethods.filter(m => m.name === 'Voucher')\r\n }\r\n if (!eligableForCashCheckPayment){\r\n paymentMethods = paymentMethods.filter(m => \r\n m.name !== 'Cash' && m.name !== 'Check'\r\n )\r\n }\r\n return paymentMethods\r\n }\r\n\r\n getPaymentMethodName = (paymentMethod) => {\r\n const paymentMethods = this.getPaymentMethods()\r\n const method = paymentMethods.filter(m => m.method === paymentMethod)[0]\r\n if (method) {\r\n return method.name\r\n }\r\n return ''\r\n }\r\n\r\n setDateToToday = evt => {\r\n const { target, } = evt.target.dataset\r\n this.formik.setFieldValue(target, dateFormatter(new Date(), 'YYYY-MM-DD'))\r\n }\r\n\r\n setFullAmount = evt => {\r\n const { target, } = evt.target.dataset\r\n this.formik.setFieldValue(target, this.props.order.BurnPermitOrderAmount)\r\n }\r\n\r\n setFormikNode = node => this.formik = node\r\n\r\n commandCode = 'Payment'\r\n\r\n mapOrderToFormikValues = () => {\r\n const { order, appDetail, eligibleForVoucherPayment, } = this.props\r\n return {\r\n BurnPermitOrderId : order.BurnPermitOrderId,\r\n BurnPermitIds : order.BurnPermitOrderXref.map(x => x.BurnPermitId),\r\n FirstName : appDetail ? appDetail.FirstName || '' : '',\r\n LastName : appDetail ? appDetail.LastName || '' : '',\r\n CheckDate : order ? dateFormatter(order.SettlementSubmissionDate || '', 'YYYY-MM-DD') : '',\r\n CheckNumber : appDetail ? appDetail.CheckNumber || '' : '',\r\n VoucherNumber : appDetail ? appDetail.VoucherNumber || '' : '',\r\n VoucherDate : order ? dateFormatter(order.SettlementSubmissionDate || '', 'YYYY-MM-DD') : '',\r\n Comment : order.BurnPermitOrderVoucher ? order.BurnPermitOrderVoucher.Comment || '' : '',\r\n TotalAmountPaid : appDetail ? order.TotalAmountPaid || '' : '',\r\n PaymentCommandCode : this.commandCode,\r\n PaymentMethod : eligibleForVoucherPayment ? 'Voucher' : (appDetail ? appDetail.PaymentMethod || CASH_METHOD : CASH_METHOD),\r\n TransactionDate : appDetail ? dateFormatter(appDetail.TransactionDate || '') : new Date(),\r\n }\r\n }\r\n\r\n render () {\r\n const { order, appDetail, onSubmit, eligibleForVoucherPayment, } = this.props\r\n const paymentMethods = this.getPaymentMethods()\r\n return \r\n {({ errors, values, }) => (\r\n
    \r\n \r\n \r\n

    Record {this.getPaymentMethodName(values.PaymentMethod)} Payment

    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n { paymentMethods.map(m => ) }\r\n \r\n {errorMessage => {errorMessage}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n {\r\n values.PaymentMethod === 'Voucher'\r\n ? <>\r\n \r\n \r\n \r\n : <>\r\n \r\n \r\n \r\n }\r\n
    \r\n Today\r\n
    \r\n
    \r\n {\r\n values.PaymentMethod === 'Check' &&\r\n \r\n \r\n \r\n \r\n }\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n Full Amount\r\n
    \r\n
    \r\n {\r\n values.PaymentMethod === 'Voucher' && <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )}\r\n \r\n }\r\n}","// Libraries\nimport React from 'react'\nimport { Formik, Field, Form, } from 'formik'\nimport { Row, Col, FormGroup, Label, Button, } from 'reactstrap'\nimport { object, func, } from 'prop-types'\n\n// Components\nimport AuditData from '../AuditData'\nimport { ValidatingField, } from '../FormControls'\n\n// Models\nimport BurnPermitOrder from '../../models/BurnPermitOrder'\n\nconst RefundForm = (props) => {\n const { order, appDetail, onSubmit, } = props\n \n return \n {({ handleSubmit, }) => (\n
    {\n if (evt.charCode === 13) {\n handleSubmit()\n }\n }}>\n \n \n

    Refund Payment

    \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n )}\n \n}\n\nRefundForm.propTypes = {\n order : object,\n appDetail : object,\n onSubmit : func,\n} \n\nRefundForm.defaultProps = {\n order : null,\n appDetail : null,\n onSubmit : () => {},\n}\n\nexport default RefundForm","import React from 'react'\r\nimport { object, } from 'prop-types'\r\nimport { Row, Col, } from 'reactstrap'\r\nimport { dateFormatter, currencyFormatter, } from '../../utilities'\r\n\r\nconst OrderPaymentSummary = ({ order, appDetail, }) => {\r\n if (!order) {\r\n return null\r\n }\r\n\r\n let paymentMethod = ''\r\n if (order && order.CardType) {\r\n paymentMethod = order.CardType\r\n }\r\n else if (order && appDetail && appDetail.PaymentMethod) {\r\n paymentMethod = appDetail.PaymentMethod\r\n }\r\n else if (!appDetail) {\r\n paymentMethod = 'E-Check'\r\n }\r\n return <>\r\n \r\n \r\n

    Payment Summary

    \r\n \r\n
    \r\n \r\n \r\n {order.CardType && order.CardType.indexOf('Check') === -1 ? 'Card' : 'Payment'} Type:\r\n \r\n \r\n {paymentMethod}\r\n \r\n \r\n {\r\n appDetail && \r\n \r\n \r\n Transaction Date:\r\n \r\n \r\n {dateFormatter(appDetail.TransactionDate, 'MM-DD-YYYY')}\r\n \r\n \r\n }\r\n {\r\n paymentMethod !== 'Voucher' && paymentMethod !== 'Check' && paymentMethod !== 'Third Party Payments (ACH Credit, POS, Cash)' && order.SettlementSubmissionDate &&\r\n \r\n \r\n Transaction Completion Date:\r\n \r\n \r\n {dateFormatter(order.SettlementSubmissionDate, 'MM-DD-YYYY hh:mm:ss a')}\r\n \r\n \r\n }\r\n {\r\n (paymentMethod === 'Voucher' || paymentMethod === 'Check') &&\r\n \r\n \r\n {paymentMethod} Date:\r\n \r\n \r\n {dateFormatter(order.SettlementSubmissionDate, 'MM-DD-YYYY')}\r\n \r\n \r\n }\r\n {\r\n order.ConfirmationNumber &&\r\n \r\n \r\n Confirmation Number:\r\n \r\n \r\n {order.ConfirmationNumber}\r\n \r\n \r\n }\r\n {\r\n paymentMethod !== 'E-Check' && order.AuthorizationCode &&\r\n \r\n \r\n Authorization Code:\r\n \r\n \r\n {order.AuthorizationCode}\r\n \r\n \r\n }\r\n {\r\n (order.TotalAmountPaid || (appDetail && appDetail.PaymentAmount)) && \r\n \r\n \r\n Total Paid:\r\n \r\n \r\n {currencyFormatter.format(order.TotalAmountPaid)}\r\n \r\n \r\n }\r\n {\r\n (appDetail && (appDetail.PaymentCommandCode === 'Refund' || appDetail.PaymentCommandCode === 'Partial Refund')) &&\r\n \r\n \r\n Refund Amount:\r\n \r\n \r\n {currencyFormatter.format(appDetail.PaymentAmount)}\r\n \r\n \r\n }\r\n {\r\n !!order.EPayResultMessage && order.EPayResultMessage.length > 2 && (\r\n \r\n \r\n Message:\r\n \r\n \r\n {order.EPayResultMessage}\r\n \r\n \r\n )\r\n }\r\n {\r\n (paymentMethod === 'Check' || paymentMethod === 'Third Party Payments (ACH Credit, POS, Cash)') &&\r\n <>\r\n \r\n \r\n Payer Name:\r\n \r\n \r\n {appDetail.FirstName} {appDetail.LastName}\r\n \r\n \r\n \r\n \r\n {paymentMethod === 'Check' ? 'Check' : 'Payment'} Date:\r\n \r\n \r\n {dateFormatter(order.SettlementSubmissionDate, 'MM-DD-YYYY')}\r\n \r\n \r\n \r\n }\r\n {\r\n paymentMethod === 'Check' &&\r\n \r\n \r\n Check Number:\r\n \r\n \r\n {appDetail.CheckNumber}\r\n \r\n \r\n }\r\n {\r\n order.BurnPermitOrderVoucher && <>\r\n \r\n \r\n Voucher Number:\r\n \r\n \r\n {order.BurnPermitOrderVoucher.VoucherNumber}\r\n \r\n \r\n \r\n \r\n Contact:\r\n \r\n \r\n {order.BurnPermitOrderVoucher.Contact}\r\n \r\n \r\n \r\n \r\n Comment:\r\n \r\n \r\n {order.BurnPermitOrderVoucher.Comment}\r\n \r\n \r\n \r\n }\r\n \r\n}\r\n\r\n\r\nOrderPaymentSummary.propTypes = {\r\n order : object,\r\n appDetail : object,\r\n}\r\n\r\nOrderPaymentSummary.defaultProps = {\r\n order : null,\r\n appDetail : null,\r\n}\r\n\r\nexport default OrderPaymentSummary","// Libraries\nimport React from 'react'\nimport { number, func, } from 'prop-types'\n\n// Components\nimport ConfirmationModal from '../ConfirmationModal'\n\n\nexport const REMOVE_PERMIT_MODAL = 'REMOVE_PERMIT_MODAL'\n\nconst RemovePermitFromOrderModal = props => {\n return Are you sure you want to remove Permit Application {props.idToRemove}{props.orderId ? ` from Order ${props.orderId}`: ''}?

    }\n cancelActionLabel={'No'}\n submitActionLabel={'Yes'}\n submitAction={props.confirmRemoveClick}\n submitArgs={[ props.idToRemove, ]}\n />\n}\n\nRemovePermitFromOrderModal.propTypes = {\n idToRemove : number,\n orderId : number,\n confirmRemoveClick : func,\n}\n\nRemovePermitFromOrderModal.defaultProps = {\n confirmRemoveClick: () => {},\n}\n\nexport default RemovePermitFromOrderModal","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { object, func, bool, number, string, PropTypes, } from 'prop-types'\nimport { Container, Card, CardBody, Button, } from 'reactstrap'\nimport { Link, } from 'react-router-dom'\nimport { isEqual, } from 'lodash'\n\n// Components\nimport BurnPermitCartSummary from './../PermitOrders/BurnPermitCartSummary'\nimport PhysicalPaymentForm from './PhysicalPaymentForm'\nimport ConfirmationModal from '../ConfirmationModal'\nimport RefundForm from './RefundForm'\nimport OrderPaymentSummary from './OrderPaymentSummary'\nimport { PopoverButton, } from '../FormControls'\nimport RemovePermitFromOrderModal, { REMOVE_PERMIT_MODAL, } from './RemovePermitFromOrderModal'\nimport {\n ApplicationNextSteps,\n} from '../Modals'\nimport withRouter from '../withRouter'\n\n// Actions\nimport AppActions from '../../redux/AppRedux'\nimport BurnPermitOrderActions from '../../redux/BurnPermitOrderRedux'\nimport UiActions from '../../redux/UiRedux'\n\n// Selectors\nimport { orderByIdSelector, orderHasPaymentSelector, orderHasIssuedPermit, orderEligibleForVoucherPayment, } from '../../selectors/orderSelectors'\n\n// Utilities\nimport stopEvent from '../../utilities/stopEvent'\nimport { userCanEditOrders, userCanRefundOrders, } from '../../selectors/burnPermitPermissionSelectors'\n\nconst DELETE_ORDER = 'DELETE_ORDER'\n\nexport class BurnPermitOrderDetail extends React.Component {\n\n constructor (props) {\n super(props)\n // Clear out any new order id to start just in case the call in the unmount\n // doesn't execute in time on a page reload or something\n this.props.SetNewOrderId()\n\n this.confirmDeleteOrder = this.confirmDeleteOrder.bind(this)\n this.state = {\n editing : false,\n refunding : false,\n }\n\n const params = new URLSearchParams(window.location.search)\n\n const paramsObj = {}\n\n for (let entry of params.entries()) {\n paramsObj[entry[0]] = entry[1]\n }\n if (paramsObj && paramsObj.showNextSteps === 'true') {\n this.props.navigate(`/permits/orders/${this.props.BurnPermitOrderId}`)\n this.props.OpenModal('APPLICATION_NEXT_STEPS')\n }\n }\n\n static propTypes = {\n // from withRouter HOC\n navigate : func,\n params : object,\n\n SetPageTitle : func,\n SetNewOrderId : func,\n GetBurnPermitOrderDetail : func,\n RemovePermitFromOrder : func,\n UpdateOrder : func,\n DeleteOrder : func,\n OpenModal : func,\n order : object,\n BurnPermitOrderId : PropTypes.oneOfType([ number, string, ]),\n orderValSchema : object,\n canEdit : bool,\n canRefund : bool,\n orderHasPayment : bool,\n showEditButton : bool,\n enableRefundButton : bool,\n eligibleForVoucherPayment : PropTypes.oneOfType([ bool, string, ]),\n isDnr : bool,\n }\n\n static defaultProps = {\n canEdit : false,\n canRefund : false,\n order : null,\n orderHasPayment : false,\n showEditButton : false,\n isDnr : false,\n enableRefundButton : false,\n }\n\n componentWillUnmount () {\n this.props.SetNewOrderId()\n }\n\n componentDidMount () {\n const { SetPageTitle, BurnPermitOrderId, GetBurnPermitOrderDetail, } = this.props\n SetPageTitle(`Burn Permit Order ${BurnPermitOrderId}`)\n GetBurnPermitOrderDetail(BurnPermitOrderId)\n }\n\n componentDidUpdate (oldProps) {\n const orderHadPayment = oldProps.orderHasPayment\n const { orderHasPayment, order, } = this.props\n // hide the form if payment was just entered\n // or if it is saved or if new information came through from the server\n if (orderHasPayment && !orderHadPayment || !isEqual(oldProps.order, order)) {\n this.setState({ editing: false, refunding: false, })\n }\n\n // Redirect back to the order list after a successful delete\n if (oldProps.order && !this.props.order) {\n this.props.navigate('/permits/orders')\n }\n }\n\n submit = (values) => {\n this.props.UpdateOrder(values)\n }\n\n toggleEditing = () => {\n this.setState({ editing: !this.state.editing, })\n }\n\n toggleRefunding = () => {\n this.setState({ refunding: !this.state.refunding, })\n }\n\n confirmDeleteOrder (evt) {\n stopEvent(evt)\n\n this.props.OpenModal(DELETE_ORDER)\n }\n\n removePermit = evt => {\n const { id, } = evt.target.dataset\n this.setState({ itemIdToRemove: parseInt(id), }, () => {\n this.props.OpenModal(REMOVE_PERMIT_MODAL)\n })\n }\n\n removeItemFromCart = itemId => {\n this.props.RemovePermitFromOrder(this.props.order.BurnPermitOrderId, itemId)\n return true\n }\n\n render () {\n const {\n order,\n canEdit,\n canRefund,\n orderHasPayment,\n showEditButton,\n enableRefundButton,\n eligibleForVoucherPayment,\n isDnr,\n } = this.props\n const { editing, refunding, } = this.state\n if (!order) {\n return null\n }\n\n const showPhysicalPaymentForm = canEdit && (editing || !orderHasPayment)\n const showOrderSummary = (!editing && orderHasPayment)\n const showRefundForm = canRefund && refunding\n const appDetail = order ? order.ApplicationDetail : null\n return \n \n

    Burn Permit Orders{' '}- Order Details

    \n \n \n x.BurnPermitId, [])}\n orderHasPayment={orderHasPayment}\n BurnPermitOrderAmount={order.BurnPermitOrderAmount}\n TotalTonnage={order.TotalTonnage}\n />\n \n {\n showEditButton &&\n
    \n
    \n \n {editing ? 'Done Editing' : 'Edit Payment'}\n \n
    \n
    \n {\n !enableRefundButton &&\n \n }\n \n {refunding ? 'Done Refunding' : 'Refund'}\n \n
    \n
    \n }\n {\n showOrderSummary && \n \n }\n {\n showPhysicalPaymentForm && \n \n }\n {\n showRefundForm &&\n \n }\n
    \n
    \n
    \n
    \n \n Delete Order\n \n {\n orderHasPayment &&\n \n }\n
    \n { !isDnr && !orderHasPayment && Pay Order }\n
    \n \n

    Are you sure you want to delete Order {this.props.BurnPermitOrderId}?

    \n }\n submitAction={this.props.DeleteOrder}\n submitArgs={[ this.props.BurnPermitOrderId, ]}\n />\n
    \n }\n}\n\nfunction mapStateToProps (state, props) {\n const { BurnPermitOrderId, } = props.params // from withRouter HOC\n const order = orderByIdSelector(state, BurnPermitOrderId)\n const hasIssuedPermit = orderHasIssuedPermit(state, BurnPermitOrderId)\n const orderHasPayment = orderHasPaymentSelector(state, BurnPermitOrderId)\n let canEdit = userCanEditOrders(state) && !hasIssuedPermit\n let eligibleForVoucherPayment = false\n if (props.isDnr || (props.isStateGovCust && props.isVerifiedAgent)) {\n eligibleForVoucherPayment = orderEligibleForVoucherPayment(state, BurnPermitOrderId)\n if (typeof eligibleForVoucherPayment === 'boolean') {\n canEdit = eligibleForVoucherPayment\n }\n }\n const canRefund = userCanRefundOrders(state) && orderHasPayment\n const showEditButton = (canEdit && orderHasPayment) && (order && !!order.ApplicationDetail) && !order.EPayReturnCode\n const enableRefundButton = (canRefund && orderHasPayment) && !order.EPayReturnCode\n \n return {\n order,\n showEditButton, \n enableRefundButton,\n BurnPermitOrderId,\n canEdit,\n canRefund,\n orderHasPayment,\n eligibleForVoucherPayment,\n }\n}\n\nconst mapDispatchToProps = {\n DeleteOrder : BurnPermitOrderActions.deleteOrder,\n GetBurnPermitOrderDetail : BurnPermitOrderActions.getBurnPermitOrderDetail,\n RemovePermitFromOrder : BurnPermitOrderActions.removePermitFromOrder,\n UpdateOrder : BurnPermitOrderActions.updateBurnPermitOrder,\n SetNewOrderId : BurnPermitOrderActions.setNewOrderId,\n SetPageTitle : AppActions.setPageTitle,\n OpenModal : UiActions.openModal,\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(BurnPermitOrderDetail))","import React from 'react'\r\nimport { number, } from 'prop-types'\r\nimport { Link, } from 'react-router-dom'\r\n\r\n\r\nconst PermitAppLink = ({ BurnPermitId, }) => {\r\n if (!BurnPermitId) {\r\n BurnPermitId = ''\r\n }\r\n let label = `Permit App #${BurnPermitId}`\r\n if (!BurnPermitId) {\r\n label = 'My Permits'\r\n }\r\n return \r\n {label}\r\n \r\n}\r\n\r\nPermitAppLink.propTypes = {\r\n BurnPermitId: number,\r\n}\r\n\r\nexport default React.memo(PermitAppLink)","// Libraries\r\nimport React from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Link, useNavigate, } from 'react-router-dom'\r\nimport { Button, Card, CardBody, CardHeader, } from 'reactstrap'\r\nimport { bool, } from 'prop-types'\r\n\r\n// Actions\r\nimport BurnPermitOrderActions from '../../redux/BurnPermitOrderRedux'\r\n\r\n// Components\r\nimport PermitAppLink from './PermitAppLink'\r\nimport Instructions from '../Instructions'\r\n\r\n// Selectors\r\nimport { newBurnPermitOrderId, } from '../../selectors/orderSelectors'\r\nimport { signatureCallbackState, } from '../../selectors/burnPermitSignatureSelectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n\r\nconst ApplicationSigned = ({ enableCreateOrder, }) => {\r\n\r\n // Hooks\r\n const dispatch = useDispatch()\r\n const navigate = useNavigate()\r\n\r\n // Selectors\r\n const { BurnPermitId, } = useSelector(signatureCallbackState)\r\n const orderId = useSelector(newBurnPermitOrderId)\r\n\r\n // UI Callbacks\r\n const createOrder = React.useCallback((e) => {\r\n stopEvent(e)\r\n if (enableCreateOrder) {\r\n dispatch(BurnPermitOrderActions.createBurnPermitOrder([ BurnPermitId, ]))\r\n }\r\n }, [ dispatch, enableCreateOrder, BurnPermitId, ])\r\n\r\n React.useEffect(() => {\r\n if (orderId > 0) {\r\n navigate(`/permits/orders/${orderId}`)\r\n }\r\n }, [ navigate, orderId, ])\r\n\r\n return \r\n \r\n
    \r\n

    Successfully Signed Application #{BurnPermitId}!

    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n New Application\r\n \r\n {\r\n enableCreateOrder && \r\n Create Order\r\n \r\n }\r\n
    \r\n
    \r\n}\r\n\r\nApplicationSigned.defaultProps = {\r\n enableCreateOrder: false,\r\n}\r\n\r\nApplicationSigned.propTypes = {\r\n enableCreateOrder: bool,\r\n}\r\n\r\nexport default React.memo(ApplicationSigned)","// Libraries\r\nimport React from 'react'\r\nimport { useSelector, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { Card, CardBody, CardHeader, } from 'reactstrap'\r\n\r\n// Components\r\nimport PermitAppLink from './PermitAppLink'\r\n\r\n// Selectors\r\nimport { signatureCallbackState, } from '../../selectors/burnPermitSignatureSelectors'\r\n\r\n\r\nconst CancelSigning = () => {\r\n // Selectors\r\n const { BurnPermitId, } = useSelector(signatureCallbackState)\r\n\r\n return \r\n \r\n
    \r\n

    Cancelled Signing Application {BurnPermitId}

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

    \r\n You chose to sign at a later time. \r\n When you're ready to sign, navigate to , \r\n expand the Signature section, then click the Sign button to sign . \r\n Or go to your nearest Region office.\r\n

    \r\n
    \r\n
    \r\n}\r\n\r\nexport default React.memo(CancelSigning)","// Libraries\r\nimport React from 'react'\r\nimport { useSelector, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { Card, CardBody, CardHeader, } from 'reactstrap'\r\n\r\n// Components\r\nimport PermitAppLink from './PermitAppLink'\r\n\r\n// Selectors\r\nimport { signatureCallbackState, } from '../../selectors/burnPermitSignatureSelectors'\r\n\r\n\r\nconst DeclineSigning = () => {\r\n // Selectors\r\n const { BurnPermitId, } = useSelector(signatureCallbackState)\r\n\r\n return \r\n \r\n
    \r\n

    Declined Signing Application {BurnPermitId}

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

    \r\n You declined to sign . \r\n You will not be Issued a Burn Permit until you sign \r\n  using the Burn Portal or in person at a Region office near you.\r\n

    \r\n

    \r\n When you're ready to sign, navigate to , \r\n navigate to the Signature section, then click the Sign button to sign . \r\n Or go to your nearest Region office.\r\n

    \r\n
    \r\n
    \r\n}\r\n\r\nexport default React.memo(DeclineSigning)","// Libraries\nimport React, { useEffect, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { Card, CardBody, CardHeader, } from 'reactstrap'\n\n// Components\nimport PermitAppLink from './PermitAppLink'\nimport Instructions from '../Instructions'\n\n// Selectors\nimport { signatureCallbackState, } from '../../selectors/burnPermitSignatureSelectors'\nimport { burnPermitNumberById, } from '../../selectors/burnPermitSelectors'\nimport BurnPermitFormActions from '../../redux/BurnPermitFormRedux'\n\n\nconst PermitSigned = () => {\n\n // Selectors\n const { BurnPermitId, } = useSelector(signatureCallbackState)\n const dispatch = useDispatch()\n\n useEffect(() => {\n if (!BurnPermitId) {\n return\n }\n dispatch(BurnPermitFormActions.getBurnPermit(BurnPermitId))\n }, [ BurnPermitId, dispatch, ])\n\n const BurnPermitNumber = useSelector(state => burnPermitNumberById(state, BurnPermitId))\n\n return \n \n
    \n

    Successfully Signed Permit {BurnPermitNumber}!

    \n \n
    \n
    \n \n \n \n
    \n \n Create Burn Request\n \n
    \n
    \n}\n\nexport default React.memo(PermitSigned)","import React from 'react'\r\nimport { string, } from 'prop-types'\r\n\r\nconst MailTo = ({ email, subject, }) => {\r\n let mailto = `mailto:${email}`\r\n if (subject) {\r\n mailto += `?subject:${subject}`\r\n }\r\n return {email}\r\n}\r\n\r\nMailTo.propTypes = {\r\n email : string,\r\n subject : string,\r\n}\r\n\r\nMailTo.defaultProps = {\r\n email : '',\r\n subject : '',\r\n}\r\n\r\nexport default MailTo","// Libraries\r\nimport React from 'react'\r\nimport { useSelector, } from 'react-redux'\r\nimport { Card, CardBody, CardHeader, } from 'reactstrap'\r\n\r\n// Selectors\r\nimport { signatureCallbackState, } from '../../selectors/burnPermitSignatureSelectors'\r\n\r\n// Components\r\nimport MailTo from '../MailTo'\r\nimport PermitAppLink from './PermitAppLink'\r\n\r\nconst {\r\n REACT_APP_SUPPORT_EMAIL,\r\n // eslint-disable-next-line no-undef\r\n} = process.env\r\n\r\nconst SigningError = () => {\r\n // Selectors\r\n const {\r\n BurnPermitId,\r\n signatureError,\r\n } = useSelector(signatureCallbackState)\r\n\r\n return \r\n \r\n
    \r\n

    Signing Error

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

    \r\n An error occurred confirming your DocuSign signature. \r\n Please contact .\r\n

    \r\n { signatureError ?

    {signatureError}

    : null }\r\n
    \r\n
    \r\n}\r\n\r\nexport default React.memo(SigningError)","import React from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { useSearchParams, } from 'react-router-dom'\r\nimport { Card, CardBody, CardHeader, Col, Container, Row, } from 'reactstrap'\r\nimport { bool, } from 'prop-types'\r\n\r\n// Actions\r\nimport AppActions from '../../redux/AppRedux'\r\n\r\n// Selectors\r\nimport { signatureCallbackState, } from '../../selectors/burnPermitSignatureSelectors'\r\n\r\n// Components\r\nimport {\r\n ApplicationSigned,\r\n CancelSigning,\r\n DeclineSigning,\r\n PermitSigned,\r\n SigningError,\r\n} from './'\r\n\r\n// Actions\r\nimport BurnPermitSignatureActions from '../../redux/BurnPermitSignatureRedux'\r\n\r\n\r\nexport const DocuSignCallback = (props) => {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const [ searchParams, ] = useSearchParams()\r\n const event = searchParams.get('event')\r\n\r\n // Selectors\r\n const {\r\n confirmingSignature,\r\n confirmationFailed,\r\n applicationSignatureConfirmed,\r\n permitSignatureConfirmed,\r\n } = useSelector(signatureCallbackState)\r\n\r\n React.useEffect(() => {\r\n dispatch(BurnPermitSignatureActions.docuSignSignatureEvent(event))\r\n }, [ dispatch, event, ])\r\n\r\n let markup = \r\n \r\n
    \r\n

    DocuSign Signature

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

    Getting your DocuSign Signature details.

    \r\n
    \r\n
    \r\n\r\n let pageTitle = 'Getting Signature Details'\r\n\r\n if (!event || confirmationFailed) {\r\n pageTitle = 'Signing Error'\r\n markup = \r\n }\r\n else if (event === 'cancel') {\r\n pageTitle = 'Cancelled Signing'\r\n markup = \r\n }\r\n else if (event === 'decline') {\r\n pageTitle = 'Declined Signing'\r\n markup = \r\n }\r\n else if (confirmingSignature) {\r\n pageTitle = 'Confirming Signature'\r\n markup = \r\n \r\n
    \r\n

    DocuSign Signature

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

    Confirming your DocuSign Signature.

    \r\n
    \r\n
    \r\n }\r\n else if (permitSignatureConfirmed) {\r\n pageTitle = 'Permit Signed!'\r\n markup = \r\n }\r\n else if (applicationSignatureConfirmed) {\r\n pageTitle = 'Application Signed!'\r\n const enableCreateOrder = props.paysByVoucher !== true\r\n markup = \r\n }\r\n\r\n React.useEffect(() => {\r\n dispatch(AppActions.setPageTitle(pageTitle))\r\n }, [ dispatch, pageTitle, ])\r\n\r\n return \r\n \r\n \r\n {markup}\r\n \r\n \r\n \r\n}\r\n\r\nDocuSignCallback.propTypes = {\r\n paysByVoucher: bool,\r\n}\r\n\r\nDocuSignCallback.defaultProps = {\r\n paysByVoucher: false,\r\n}\r\n\r\nexport default React.memo(DocuSignCallback)","// Libraries\nimport React from 'react'\nimport { Toast, ToastBody, } from 'reactstrap'\nimport { func, } from 'prop-types'\n\n\nexport const ReloadApp = ({ onClick, }) => {\n return \n \n \n New version available! Refresh to install.\n \n Refresh\n \n \n \n}\n\nReloadApp.propTypes = {\n onClick: func,\n}\n\nReloadApp.defaultProps = {\n onClick: function () {\n window.location = window.location.origin\n },\n}\n\nexport default ReloadApp","// Libraries\nimport React from 'react'\nimport { Col, Card, CardBody, } from 'reactstrap'\nimport { string, } from 'prop-types'\n\nconst ReportMessageCard = ({ message, }) => {\n return \n \n \n

    {message}

    \n
    \n
    \n \n}\n\nReportMessageCard.propTypes = {\n message: string,\n}\n\nexport default ReportMessageCard","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { object, string, func, bool, } from 'prop-types'\r\nimport { Container, Row, Col, Card, CardBody, } from 'reactstrap'\r\nimport { Link, } from 'react-router-dom'\r\n\r\n// Reducers\r\nimport ApiActions from '../../redux/ApiRedux'\r\nimport AppActions from '../../redux/AppRedux'\r\nimport ReportActions from '../../redux/ReportsRedux'\r\n\r\n// Components\r\nimport ReportMessageCard from './ReportMessageCard'\r\nimport withRouter from '../withRouter'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER, } = process.env\r\nconst REPORT_SERVER_URL = `${REACT_APP_SERVER}Reports`\r\n\r\nclass ReportViewer extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n // Set a flag indicating if the user is using an outdated version of Edge or not\r\n const ua = navigator.userAgent\r\n const edge = ua.indexOf('Edge/')\r\n // Tried using regex, but the old version doesn't support one of the regex operators 🤦‍♂️\r\n this.isOldEdgeBrowser = parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10) < 18\r\n }\r\n\r\n static propTypes = {\r\n online : bool,\r\n params : object.isRequired,\r\n ReportName : string,\r\n ReportPath : string,\r\n Token : string,\r\n SetPageTitle : func,\r\n ShowLoading : func,\r\n HideLoading : func,\r\n DownloadReport : func,\r\n Failure : func,\r\n }\r\n\r\n state = {\r\n loading : true,\r\n reportHtml : '',\r\n page : 1,\r\n }\r\n\r\n componentDidMount = () => {\r\n const { SetPageTitle, ReportName, online, } = this.props\r\n\r\n SetPageTitle(ReportName)\r\n if (online) {\r\n this.reportRequest()\r\n }\r\n }\r\n\r\n reportRequest = async (params) => {\r\n const { ReportPath, Token, ShowLoading, } = this.props\r\n \r\n ShowLoading()\r\n \r\n let url = `${REPORT_SERVER_URL}/Report?reportPath=${ReportPath}`\r\n if (params) {\r\n url += `&${params}`\r\n }\r\n const req = await fetch(url, {\r\n headers: {\r\n 'Content-Type' : 'text/html',\r\n 'Authorization' : `Bearer ${Token}`,\r\n },\r\n })\r\n\r\n if (this.state.reportHtml) {\r\n this.setState({ reportHtml: '', })\r\n }\r\n\r\n const state = { ...this.state, }\r\n state.loading = false\r\n\r\n const resp = await req.text()\r\n\r\n if (req.ok === false) {\r\n state.error = resp || 'An error occurred requesting the report.'\r\n this.setState(state)\r\n this.props.HideLoading()\r\n return\r\n }\r\n state.reportHtml = resp\r\n\r\n this.setState(state, this.extractTable)\r\n }\r\n\r\n collectionToArray = collection => {\r\n return Array.prototype.slice.call(collection)\r\n }\r\n\r\n extractTable = () => {\r\n let tableEls = this.reportNode.getElementsByTagName('table')\r\n if (!tableEls || !tableEls.length) {\r\n return\r\n }\r\n if (this.isOldEdgeBrowser) {\r\n tableEls = this.collectionToArray(tableEls)\r\n }\r\n // Get a list of tables\r\n // Turn the HTMLCollection into an array\r\n const tables = [ ...tableEls, ]\r\n // Get instance of the deepest table that has the actual data\r\n const dataTable = tables[tables.length - 1]\r\n // Get a handle on the content div\r\n const content = this.reportNode.getElementsByClassName('ReportViewerContent')[0]\r\n // In the case an error occurred, no elements will be rendered in the content div\r\n if (!content.firstElementChild) {\r\n return\r\n }\r\n // Empty the content div\r\n content.removeChild(content.firstElementChild)\r\n // Append the datatable\r\n content.appendChild(dataTable)\r\n\r\n // Add the datatable classes to the table\r\n const table = this.reportNode.getElementsByTagName('table')[0]\r\n table.classList.add('table', 'table-striped', 'dataTable', 'border')\r\n\r\n // Get a handle on the body\r\n const tbody = table.getElementsByTagName('tbody')[0]\r\n // Remove the first row since it's empty\r\n tbody.removeChild(tbody.firstElementChild)\r\n // Get the table rows\r\n let rows = tbody.getElementsByTagName('tr')\r\n let { children, } = rows[0]\r\n if (this.isOldEdgeBrowser) {\r\n rows = this.collectionToArray(rows)\r\n children = this.collectionToArray(children)\r\n }\r\n // Get the new first one that is the headers\r\n const headerCells = [ ...children, ]\r\n // Create an actual thead and row\r\n const thead = document.createElement('thead')\r\n const headerRow = document.createElement('tr')\r\n \r\n // Add the cells to the new thead row\r\n for (let i = 0, len = headerCells.length; i < len; i++) {\r\n const newTh = document.createElement('th')\r\n newTh.innerText = headerCells[i].innerText\r\n headerRow.appendChild(newTh)\r\n }\r\n thead.appendChild(headerRow)\r\n // Add the new thead to the table before the body\r\n table.insertBefore(thead, tbody)\r\n\r\n this.getElements()\r\n this.props.HideLoading()\r\n }\r\n\r\n getElements = () => {\r\n \r\n this.dropdownToggle = this.reportNode.querySelector('#ExportMenu')\r\n this.currentPage = this.reportNode.querySelector('#ReportViewerCurrentPage')\r\n \r\n const totalPages = this.reportNode.querySelector('#TotalPages')\r\n\r\n const newState = { ...this.state, }\r\n if (totalPages) {\r\n newState.totalPages = parseInt(totalPages.innerText)\r\n }\r\n\r\n this.setState(newState)\r\n }\r\n\r\n onKeyUp = evt => {\r\n const { id, value, } = evt.target\r\n if (id === 'ReportViewerCurrentPage') {\r\n const currentPage = parseInt(value)\r\n this.currentPage.value = currentPage\r\n this.setState({ page: currentPage, })\r\n }\r\n }\r\n\r\n onKeyPress = evt => {\r\n const { id, } = evt.target\r\n if (id === 'ReportViewerCurrentPage' && evt.charCode === 13) {\r\n stopEvent(evt)\r\n const { page, totalPages, } = this.state\r\n if (page > totalPages) {\r\n this.props.Failure(`The specified page number ${page} is greater than Total Pages available ${totalPages}.`)\r\n return\r\n }\r\n else if (page < 1 || isNaN(page)) {\r\n this.props.Failure(`You must specify a page number between 1 and ${totalPages}.`)\r\n return\r\n }\r\n const params = this.buildParamString()\r\n this.reportRequest(`${params}&page=${page}`)\r\n }\r\n }\r\n\r\n buildParamString = () => {\r\n const paramContainer = this.reportNode.getElementsByClassName('ParametersContainer')[0]\r\n if (!paramContainer) {\r\n this.reportRequest()\r\n return ''\r\n }\r\n\r\n let inputs = paramContainer.getElementsByTagName('input')\r\n let selects = paramContainer.getElementsByTagName('select')\r\n if (this.isOldEdgeBrowser) {\r\n inputs = this.collectionToArray(inputs)\r\n selects = this.collectionToArray(selects)\r\n }\r\n\r\n let params = [ ...inputs, ...selects, ]\r\n params = params\r\n .filter(p => !!p.value)\r\n .map(p => `${p.name}=${p.value}`)\r\n .join('&')\r\n \r\n return params\r\n }\r\n\r\n viewReportWithParams = () => {\r\n const params = this.buildParamString()\r\n this.reportRequest(params)\r\n }\r\n\r\n exportReport = exportType => {\r\n const params = this.buildParamString()\r\n const exportReportRequest = `${this.props.ReportPath}&${params}`\r\n this.props.DownloadReport(exportReportRequest, exportType)\r\n }\r\n\r\n onClick = evt => {\r\n const { id, name, type, classList, parentElement, } = evt.target\r\n\r\n // If it's the date inputs, don't stop the event otherwise the browser\r\n // calendar controls won't display\r\n if (type === 'date') {\r\n return\r\n }\r\n\r\n stopEvent(evt)\r\n \r\n if (id === 'NextPage') {\r\n this.setPage(this.state.page + 1)\r\n }\r\n else if (id === 'PreviousPage') {\r\n this.setPage(this.state.page - 1)\r\n }\r\n else if (id === 'FirstPage' || id === 'Refresh') {\r\n this.setPage(1)\r\n }\r\n else if (id === 'LastPage') {\r\n this.setPage(this.state.totalPages)\r\n }\r\n else if (classList.contains('Export')) {\r\n this.exportReport(name)\r\n this.exportDropdownToggle()\r\n }\r\n else if (classList.contains('ViewReport')) {\r\n this.viewReportWithParams()\r\n }\r\n else if ((id === 'ExportMenu' || parentElement.id === 'ExportMenu') || this.state.exportMenuOpen) {\r\n this.exportDropdownToggle()\r\n }\r\n }\r\n\r\n setPage = page => {\r\n if (page < 1 || page > this.state.totalPages || isNaN(page)) {\r\n this.props.Failure(`You must specify a page number between 1 and ${this.state.totalPages}.`)\r\n return\r\n }\r\n this.setState({ page, }, () => {\r\n const params = this.buildParamString()\r\n this.reportRequest(`${params}&page=${this.state.page}`)\r\n })\r\n }\r\n\r\n exportDropdownToggle = () => {\r\n const { nextElementSibling: exportMenu, } = this.dropdownToggle\r\n exportMenu.classList.toggle('show')\r\n this.setState({ exportMenuOpen: exportMenu.classList.contains('show'), })\r\n }\r\n\r\n setNode = node => this.reportNode = node\r\n\r\n render () {\r\n let children = ''\r\n if (!this.props.online) {\r\n children = \r\n }\r\n else if (this.state.loading) {\r\n children = \r\n }\r\n else if (this.state.error) {\r\n children = \r\n \r\n
    \r\n \r\n \r\n }\r\n else {\r\n children = \r\n \r\n
    \r\n \r\n \r\n }\r\n\r\n return \r\n \r\n \r\n

    Reports - {this.props.ReportName}

    \r\n \r\n
    \r\n \r\n \r\n {children}\r\n \r\n \r\n
    \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n const { id, } = props.params\r\n let ReportName = 'Report', ReportPath = ''\r\n const report = state.Reports.reports.filter(r => r.Id === id)\r\n if (report.length) {\r\n ReportName = report[0].Name\r\n ReportPath = report[0].Path\r\n }\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n ReportName,\r\n ReportPath,\r\n Token: state.User.token,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n Failure : ApiActions.failure,\r\n ShowLoading : AppActions.showLoading,\r\n HideLoading : AppActions.hideLoading,\r\n SetPageTitle : AppActions.setPageTitle,\r\n DownloadReport : ReportActions.downloadReport,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ReportViewer))","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { array, func, bool, } from 'prop-types'\r\nimport { Toast, ToastBody, ToastHeader, } from 'reactstrap'\r\n\r\n// Actions\r\nimport ApiActions from '../redux/ApiRedux'\r\n\r\nclass OfflineMessage extends React.Component {\r\n\r\n static propTypes = {\r\n offlineMessages : array,\r\n preparingOffline : bool,\r\n offlinePrepared : bool,\r\n ClearOfflineMessage : func,\r\n OfflineMessage : func,\r\n }\r\n\r\n onClick = evt => {\r\n const { id, } = evt.target.dataset\r\n this.props.ClearOfflineMessage(id)\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n if (!prevProps.preparingOffline && this.props.preparingOffline) {\r\n this.props.OfflineMessage('You are almost ready to operate offline. Go to \"My Burn Permits\" and \"My Burn Requests\" to download your data for offline access.')\r\n }\r\n }\r\n\r\n render () {\r\n const { offlineMessages, } = this.props\r\n if (offlineMessages.length === 0) {\r\n return null\r\n }\r\n const msgs = []\r\n for (let i = 0, len = offlineMessages.length; i < len; i++) {\r\n const msg = offlineMessages[i]\r\n msgs.push(\r\n \r\n \r\n \r\n Offline Action\r\n {msg.occurredAt}\r\n \r\n \r\n \r\n {msg.message}\r\n \r\n \r\n )\r\n }\r\n return
    {msgs}
    \r\n }\r\n}\r\n \r\nconst mapStateToProps = (state, props) => {\r\n return {\r\n preparingOffline : state.api.preparingOffline,\r\n offlinePrepared : state.api.offlinePrepared,\r\n offlineMessages : state.api.offlineMessages,\r\n location : props.location,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ClearOfflineMessage : ApiActions.clearOfflineMessage,\r\n OfflineMessage : ApiActions.offlineMessage,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(OfflineMessage)","import React, { useMemo, } from 'react'\nimport { Container, Card, Col, CardBody, Row, CardText, } from 'reactstrap'\n\n// Componnets\nimport DNRNavbar from './Navbar'\nimport LoadingBar from './LoadingBar'\n\nexport const AppLoading = () => {\n const loadingBarStyle = useMemo(() => ({ top: 0, zIndex: 10, }), [])\n const colStyles = useMemo(() => ({ size: '6', offset: '3', }), [])\n const cardStyles = useMemo(() => ({ textAlign: 'center', }), [])\n return (\n \n
    \n \n \n \n \n \n \n \n \n Loading...\n \n \n \n \n \n \n
    \n
    \n )\n}\n\nexport default AppLoading\n","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { array, func, object, } from 'prop-types'\r\nimport { Toast, ToastBody, ToastHeader, } from 'reactstrap'\r\n\r\n// Actions\r\nimport ApiActions from '../redux/ApiRedux'\r\n\r\n// Components\r\nimport withRouter from './withRouter'\r\n\r\nclass GeneralMessage extends React.Component {\r\n\r\n static propTypes = {\r\n // from withRouter HOC\r\n location: object,\r\n\r\n generalMessages : array,\r\n ClearGeneralMessage : func,\r\n ClearAllGeneralMessages : func,\r\n }\r\n\r\n static defaultProps = {\r\n generalMessages: [],\r\n }\r\n\r\n onClick = evt => {\r\n const { id, } = evt.target.dataset\r\n this.props.ClearGeneralMessage(id)\r\n }\r\n\r\n // This should clear the Messages on change of the route\r\n componentDidUpdate (prevProps) {\r\n const { location, ClearAllGeneralMessages, } = this.props\r\n if (prevProps.location.pathname !== location.pathname) {\r\n ClearAllGeneralMessages()\r\n }\r\n }\r\n \r\n render () {\r\n const { generalMessages, } = this.props\r\n if (generalMessages.length === 0) {\r\n return null\r\n }\r\n const messages = []\r\n for (let i = 0, len = generalMessages.length; i < len; i++) {\r\n const Message = generalMessages[i]\r\n messages.push(\r\n \r\n \r\n \r\n { Message.title }\r\n {Message.occurredAt}\r\n \r\n \r\n \r\n { Message.message }\r\n \r\n \r\n )\r\n }\r\n return
    {messages}
    \r\n }\r\n}\r\n \r\nconst mapStateToProps = (state) => {\r\n return {\r\n generalMessages: state.api.generalMessages,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ClearGeneralMessage : ApiActions.clearGeneralMessage,\r\n ClearAllGeneralMessages : ApiActions.clearAllGeneralMessages,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(GeneralMessage))","const TourSteps = ({ isDnr = false, }) => {\n const steps = [\n {\n target : 'span.esri-icon-layer-list',\n content : 'Toggle layers on and off',\n placement : 'right',\n disableBeacon : true,\n },\n {\n target : 'span.esri-icon-basemap',\n content : 'Change basemaps between Satellite, street map, and others',\n placement : 'right',\n },\n {\n target : 'span.esri-icon-locate',\n content : 'Zoom to your current location',\n placement : 'right',\n },\n {\n target : '.esri-ui',\n content : 'Click anywhere within the state of Washington to estimate the location of the Smoke Event',\n placement : 'right',\n },\n {\n target : 'form .card-body',\n content : 'Fill out the form, providing as much detailed information as you can',\n placement : 'left',\n },\n {\n target : 'form button[type=submit]',\n content : 'Submit the data for DNR to review',\n placement : 'top',\n },\n ]\n\n if (isDnr === true) {\n const formStep = { ...steps[4], }\n formStep.content = 'You can modify the Latitude, Longitude, and Address inputs if needed. All other data is read only.'\n steps[4] = formStep\n\n const submitStep = { ...steps[5], }\n submitStep.content = 'Save the location data modifications'\n steps[5] = submitStep\n\n steps.push({\n target : '.link-burn-reqs-btn-group',\n content : 'View or associate one or more burn request / post burn events to this complaint',\n placement : 'left',\n })\n steps.push({\n target : '.smoke-complaint-status',\n content : 'Route this complaint to another DNR rep or region or manage its status',\n placement : 'left',\n })\n }\n\n return steps\n}\n\nexport default TourSteps\n","import { useEffect, } from 'react'\nimport { useFormikContext, } from 'formik'\nimport { useSelector, } from 'react-redux'\n\n// Seletors\nimport { latLongSelector, mapStateSelector, } from '../../../selectors/mapSelectors'\n\n\nconst LatLongEffect = () => {\n const { setFieldValue, } = useFormikContext()\n const { Latitude, Longitude, } = useSelector(latLongSelector)\n const { MapActive, MapLoading, } = useSelector(mapStateSelector)\n\n useEffect(() => {\n if (MapLoading !== true && MapActive !== true) {\n return\n }\n setFieldValue('Latitude', Latitude || '', true)\n setFieldValue('Longitude', Longitude || '', true)\n }, [ Latitude, Longitude, MapActive, MapLoading, setFieldValue, ])\n return null\n}\n\nexport default LatLongEffect\n","import React, { useMemo, } from 'react'\nimport { Field, useFormikContext, } from 'formik'\nimport { Col, Collapse, FormGroup, Label, Row, } from 'reactstrap'\nimport { bool, } from 'prop-types'\n\n// Components\nimport { ValidatingField, } from '../../FormControls'\n\n\nconst FollowUpForm = props => {\n const { readOnly, } = props\n const { values, } = useFormikContext()\n\n const prompt = useMemo(() => {\n if (readOnly) {\n return null\n }\n return

    \n \n If you would like to follow-up on your complaint,\n or would be willing to have a representative from DNR contact\n you if additional information is needed, please leave your contact information below.\n \n

    \n }, [ readOnly, ])\n\n // todo: will prob need to do a value properties cleanup\n // if a user chooses yes, fills out some/all info, then\n // toggles to no\n // on the backend we should honor this property value and\n // ignore any FollowUp values if the submitter does not\n // request follow up.\n if (values.FollowUp !== true) {\n return null\n }\n\n const markup = \n {prompt}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return markup\n}\n\nFollowUpForm.defaultProps = {\n readOnly: false,\n}\n\nFollowUpForm.propTypes = {\n readOnly: bool,\n}\n\nexport default React.memo(FollowUpForm)","import * as Yup from 'yup'\n\n// Models\nimport BurnPermitLocation from '../../../models/BurnPermitLocation'\n\nconst { Latitude, Longitude, } = BurnPermitLocation.fields\n\nconst ValidationSchema = Yup.object().shape({\n InteractionDescription : Yup.string().required('You must provide a description of the event.'),\n Latitude : Yup.number()\n .typeError('Latitude must be a number')\n .min(Latitude.opts.min, `Latitude must be between ${Latitude.opts.min} and ${Latitude.opts.max}.`)\n .max(Latitude.opts.max, `Latitude must be between ${Latitude.opts.min} and ${Latitude.opts.max}.`),\n Longitude: Yup.number()\n .typeError('Longitude must be a number')\n .min(Longitude.opts.min, `Longitude must be between ${Longitude.opts.min} and ${Longitude.opts.max}.`)\n .max(Longitude.opts.max, `Longitude must be between ${Longitude.opts.min} and ${Longitude.opts.max}.`),\n FollowUp : Yup.bool().nullable().required('Please specify whether or not a DNR representative should follow up with you regarding this complaint.'),\n PhoneNumber : Yup.string()\n .nullable()\n .test('phone-number-length', 'Phone number must contain 10 digits (i.e., 123-456-7890)', phone => {\n if (!phone) {\n return true\n }\n const alphaReg = /\\D/g\n if (alphaReg.test(`${phone}`)) {\n return false\n }\n const digits = `${phone}`.replace(alphaReg, '')\n return digits.length === 10 || digits.length === 0\n }),\n EmailAddress: Yup.string()\n .nullable()\n .test('email-address-format', 'Email address must be in the form of: name@provider.domain', email => {\n if (!email) {\n return true\n }\n const reg = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return reg.test(`${email}`) || !email\n }),\n})\n\nexport default ValidationSchema\n","import { attr, Model, } from 'redux-orm'\nimport { renderAcres, renderCheckOrXIcon, renderDateTime, renderLatLong, renderTons, } from '../utilities/columnHelpers'\nimport { dateFormatter, } from '../utilities'\n\nexport default class BurnComplaintSearchResult extends Model {\n static get modelName () {\n return 'BurnComplaintSearchResult'\n }\n\n toString () {\n return `${this.BurnRequestId}`\n }\n\n static endpoint () {\n return 'BurnComplaintSearchResults'\n }\n\n static get options () {\n return {\n idAttribute: 'BurnRequestId',\n }\n }\n\n static getDataTablesColumns () {\n\n const cols = [\n {\n title : '',\n data : 'IsAssociated',\n },\n {\n title : 'Burn Permit ID',\n data : 'BurnPermitId',\n className : 'text-right pr-4',\n type : 'num',\n },\n {\n title : 'Burn Request ID',\n data : 'BurnRequestId',\n className : 'text-right pr-4',\n type : 'num',\n },\n {\n title : 'Miles Away',\n data : 'MilesAway',\n render : (data, drawType, row) => {\n if (drawType !== 'display' || !data) {\n return data\n }\n return `${data.toFixed(2)} mi ${row.CardinalDirection}`\n },\n },\n {\n title : 'Permit Number',\n data : 'BurnPermitNumber',\n className : 'text-right pr-4',\n },\n {\n title : 'Unit Name',\n data : 'BurnUnitName',\n width : '100px',\n },\n {\n defaultContent : '',\n title : 'Landowner',\n data : 'Landowner',\n width : '150px',\n },\n {\n defaultContent : '',\n title : 'Agent',\n data : 'Agent',\n width : '150px',\n },\n {\n defaultContent : '',\n title : 'Agency',\n data : 'Agency',\n width : '150px',\n },\n {\n title : 'Request Date',\n data : 'BurnRequestDate',\n className : 'text-right pr-4',\n render : renderDateTime,\n width : '75px',\n },\n {\n title : 'Status',\n data : 'BurnRequestStatus',\n width : '75px',\n render : (data, drawType, row) => {\n if (drawType === 'sort') {\n return row.BurnRequestStatusDate\n }\n if (drawType !== 'display') {\n return row.BurnRequestStatus\n }\n else if (!data) {\n return data\n }\n return `${row.BurnRequestStatus}
    ${dateFormatter(row.BurnRequestStatusDate, 'MMM DD, YYYY')}`\n },\n },\n {\n title : 'Ignition Date',\n data : 'PlannedIgnitionDate',\n render : (data, drawType, row) => {\n if (drawType !== 'display') {\n return data\n }\n return `${dateFormatter(data, 'MMM DD, YYYY')} ${row.PlannedIgnitionTime}`\n },\n },\n {\n title : 'Post Burn Date',\n data : 'PostBurnDate',\n className : 'text-right pr-4',\n render : renderDateTime,\n },\n {\n title : 'In UGA',\n data : 'IsUGA',\n render : renderCheckOrXIcon,\n },\n {\n title : 'Forest Health Exempt',\n data : 'IsForestHealthExempt',\n defaultContent : '',\n render : (data, drawType) => {\n if (drawType === 'sort') {\n return data === null ? 0 : data === true ? 1 : -1\n }\n if (drawType !== 'display') {\n return data\n }\n if (data === null) {\n return data\n }\n return renderCheckOrXIcon(data, drawType)\n },\n },\n {\n title : 'Permit Tonnage',\n data : 'TotalPermitTonnage',\n className : 'text-right pr-4',\n render : renderTons,\n },\n {\n title : 'Post Burn Tonnage',\n data : 'PostBurnTonnage',\n className : 'text-right pr-4',\n render : renderTons,\n },\n {\n title : 'Post Burn Area',\n data : 'PostBurnArea',\n className : 'text-right pr-4',\n render : renderAcres,\n }, \n {\n title : 'Lat, Long',\n data : '',\n visible : false,\n render : renderLatLong,\n },\n ]\n\n return cols\n }\n\n static get fields () {\n return {\n // Model-Specific Properties\n BurnRequestId : attr(),\n BurnPermitId : attr(),\n BurnPermitNumber : attr(),\n MilesAway : attr(),\n CardinalDirection : attr(),\n TotalPermitTonnage : attr(),\n BurnUnitName : attr(),\n Landowner : attr(),\n Agency : attr(),\n Agent : attr(),\n BurnRequestDate : attr(),\n PlannedIgnitionDate : attr(),\n PlannedIgnitionTime : attr(),\n PostBurnDate : attr(),\n PostBurnTonnage : attr(),\n PostBurnArea : attr(),\n County : attr(),\n Region : attr(),\n IsUGA : attr(),\n BurnRequestStatus : attr(),\n BurnRequestStatusDate : attr(),\n IsForestHealthExempt : attr(),\n Latitude : attr(),\n Longitude : attr(),\n }\n }\n}\n","import React, { useMemo, useRef, useState, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { render as ReactDOMRender, } from 'react-dom'\nimport { array, bool, number, oneOfType, string, } from 'prop-types'\nimport { isEqual, } from 'lodash'\nimport {\n Alert,\n Col,\n Row,\n} from 'reactstrap'\n\n// Reducers\nimport CustomerInteractionActions from '../../../../redux/CustomerInteractionRedux'\n\n// Components\nimport DataTable from '../../../DataTable'\n\n// Models\nimport BurnComplaintSearchResult from '../../../../models/BurnComplaintSearchResult'\n\n// Hooks\nimport { useTableCellLink, } from '../../../../hooks'\n\n// Selectors\nimport { smokeComplaintPermitXrefs, } from '../../../../selectors/customerInteractionSelectors'\n\n\nconst addToClasses = 'fa-plus btn-success'\nconst removeFromClasses = 'fa-minus btn-danger'\n\nconst addToTitle = 'Link Burn to Complaint'\nconst removeFromTitle = 'Remove Burn from Complaint'\n\n\nconst AssociatedBurns = props => {\n const {\n enableAdd,\n CustomerInteractionId,\n elementId,\n burns,\n show,\n } = props\n\n const [ showPrompt, setShowPrompt, ] = useState(false)\n\n const xrefs = useSelector(state => smokeComplaintPermitXrefs(state, CustomerInteractionId))\n\n const prevXrefs = useRef(xrefs)\n const redrawTable = !isEqual(prevXrefs.current, xrefs)\n\n const dispatch = useDispatch()\n\n const reqLinkCellCallback = useTableCellLink({ route: 'burn-requests', })\n const permLinkCellCallback = useTableCellLink({ route: 'permits', })\n\n const columns = useMemo(() => {\n const cols = BurnComplaintSearchResult.getDataTablesColumns()\n return [ ...cols, ]\n }, [])\n\n const burnReqColumnDefs = useMemo(() => {\n const onToggleAssoc = (e) => {\n const BurnPermitId = parseInt(e.target.getAttribute('data-permit-id'))\n if (e.target.classList.value.includes(addToClasses)) {\n dispatch(CustomerInteractionActions.associateBurn({ CustomerInteractionId, BurnPermitId, }))\n }\n else {\n dispatch(CustomerInteractionActions.removeBurnAssociation({ CustomerInteractionId, BurnPermitId, }))\n }\n setShowPrompt(true)\n }\n \n const linkPermitCellCallback = (td, cellData, row) => {\n let classes = removeFromClasses, title = removeFromTitle\n let xrefId\n const IsAssociated = `${cellData}` === 'true'\n const permitId = parseInt(row.BurnPermitId)\n if (enableAdd && !IsAssociated) {\n classes = addToClasses\n title = addToTitle\n }\n if (IsAssociated) {\n const permitIdIdx = xrefs.findIndex(x => x.BurnPermitId === permitId)\n if (permitIdIdx >= 0) {\n xrefId = xrefs[permitIdIdx].CustomerInteractionBurnPermitXrefId\n }\n }\n return ReactDOMRender(, td)\n }\n return [\n {\n target : 0,\n createdCell : linkPermitCellCallback,\n },\n {\n targets : columns.findIndex(c => c.data === 'BurnRequestId'),\n createdCell : reqLinkCellCallback,\n },\n {\n targets : columns.findIndex(c => c.data === 'BurnPermitId'),\n createdCell : permLinkCellCallback,\n },\n ]\n }, [ xrefs, columns, enableAdd, CustomerInteractionId, reqLinkCellCallback, permLinkCellCallback, dispatch, ])\n\n if (!CustomerInteractionId || !show) {\n return null\n }\n\n return \n \n \n

    \n If you have not already, log a status change that includes a brief description\n why you added or removed Burn Permits.\n

    \n

    \n If you have added a Burn Permit from another Region than where the complaint\n is located, consider assigning someone from that Region to also review the complaint.\n

    \n
    \n \n \n \n \n
    \n}\n\nAssociatedBurns.defaultProps = {\n elementId: 'associated-burns-table',\n}\n\nAssociatedBurns.propTypes = {\n CustomerInteractionId : oneOfType([ number, string, ]),\n elementId : string,\n burns : array,\n enableAdd : bool,\n show : bool,\n}\n\nexport default React.memo(AssociatedBurns)\n","// Libraries\nimport React, { useMemo, } from 'react'\nimport { Row, Col, Label, Input, } from 'reactstrap'\nimport { string, func, bool, number, object, oneOfType, } from 'prop-types'\nimport PopoverButton from '../FormControls/PopoverButton'\n\nconst SearchInput = props => {\n const {\n label,\n labelClassName,\n name,\n onChange,\n onBlur,\n value,\n defaultValue,\n placeholder,\n showPopover,\n popoverHeader,\n popoverBody,\n } = props\n\n const colSize = useMemo(() => (showPopover ? 9 : 12), [ showPopover, ])\n const labelFor = useMemo(() => (`txt-search-${name}`), [ name, ])\n const popover = useMemo(() => {\n if (!showPopover) {\n return null\n }\n return \n \n \n }, [ popoverHeader, popoverBody, showPopover, ])\n\n const input = useMemo(() => {\n const inputProps = {\n id : labelFor,\n name : name,\n onChange : onChange,\n onBlur : onBlur,\n placeholder : placeholder,\n }\n if (value) {\n inputProps.value = value || ''\n }\n if (defaultValue) {\n inputProps.defaultValue = defaultValue || ''\n }\n\n return \n }, [ value, defaultValue, labelFor, placeholder, name, onChange, onBlur, ])\n\n return <>\n \n \n {label}\n \n {popover}\n \n {input}\n \n}\n\nSearchInput.propTypes = {\n name : string.isRequired,\n label : string.isRequired,\n onChange : func.isRequired,\n onBlur : func,\n labelClassName : string,\n value : string,\n defaultValue : oneOfType([ number, string, ]),\n placeholder : string,\n showPopover : bool,\n popoverHeader : string,\n popoverBody : oneOfType([ object, string, ]),\n}\n\nSearchInput.defaultProps = {\n showPopover: false,\n}\n\nexport default React.memo(SearchInput)\n","// Libraries\nimport React from 'react'\nimport { string, func, } from 'prop-types'\nimport SearchInput from './SearchInput'\n\nconst ApplicationId = ({ value, name, onChange, }) => {\n return Use the Permit Application ID to find Permits that are submitted or in review. Burn Permit Number is not assigned to a Permit until the application is Issued.}\n />\n}\n\nApplicationId.propTypes = {\n name : string,\n value : string,\n onChange : func,\n}\n\nApplicationId.defaultProps = {\n name: 'ApplicationId',\n}\n\nexport default ApplicationId","// Libraries\nimport React from 'react'\nimport DayPickerInput from 'react-day-picker/DayPickerInput'\nimport { array, string, func, object, } from 'prop-types'\nimport { months, } from 'dayjs/locale/en'\n\n// Utilities\nimport { dateFormatter, } from '../../utilities'\n\n// Styles\nimport 'react-day-picker/lib/style.css'\n\nconst date = dateFormatter(new Date())\nconst fromMonth = date.add(-10, 'year').toDate()\nconst toMonth = date.toDate()\n\nconst yearsMarkup = []\nfor (let i = fromMonth.getFullYear(); i <= toMonth.getFullYear(); i += 1) {\n yearsMarkup.push(\n \n )\n}\n\nconst monthsMarkup = months.map((month, i) => (\n \n))\n\nfunction YearMonthForm ({ date, onChange, }) {\n return
    \n {/* eslint-disable-next-line jsx-a11y/no-onchange */}\n \n {/* eslint-disable-next-line jsx-a11y/no-onchange */}\n \n
    \n}\n\nYearMonthForm.propTypes = {\n date : object,\n onChange : func,\n}\n\n\nexport default class DateRange extends React.Component {\n\n static propTypes = {\n from : string,\n to : string,\n fromPlaceholder : string,\n toPlaceholder : string,\n disabledDays : array,\n enteredTo : string,\n onClick : func,\n setValid : func,\n name : string,\n }\n\n static defaultProps = {\n from : '',\n to : '',\n fromPlaceholder : 'yyyy-mm-dd',\n toPlaceholder : 'yyyy-mm-dd',\n disabledDays : [],\n onClick : () => {},\n setValid : () => {},\n name : '',\n }\n\n state = {\n fromMonth : date.add(-1, 'year').toDate(),\n toMonth : toMonth,\n fromValid : true,\n toValid : true,\n }\n\n setValid = (from = null, to = null) => {\n const fromValid = from === null ? this.state.fromValid : from\n const toValid = to === null ? this.state.toValid : to\n if ((fromValid || fromValid === null) && (toValid || toValid === null)) {\n this.props.setValid(this.props.name, true)\n } else {\n this.props.setValid(this.props.name, false)\n }\n this.setState({ fromValid, toValid, })\n }\n\n setParsedValid = (isValid, which) => {\n if (which === 'to') {\n this.setValid(null, isValid)\n } else if (which === 'from') {\n this.setValid(isValid)\n }\n }\n\n handleFromChange = (from, modifiers, dayPickerInput) => {\n // Change the from date and focus the \"to\" input field\n this.props.onClick({ from, })\n const _date = dateFormatter(from)\n if (_date) {\n if (typeof _date.isValid === 'function' && _date.isValid()){\n this.setValid(true)\n if (this.toPicker && this.toPicker.getInput()){\n this.toPicker.getInput().focus()\n }\n } else {\n this.setValid(false)\n }\n } else if (dayPickerInput.input.value === '') {\n this.setValid(true)\n }\n\n if (this.toInput) {\n this.toInput.focus()\n }\n }\n\n handleToChange = (to, modifiers, dayPickerInput) => {\n const { from, } = this.props\n const picker = dayPickerInput.getDayPicker()\n const input = dayPickerInput.getInput()\n this.props.onClick({ from, to, })\n const _date = dateFormatter(to)\n\n if (_date) {\n if (typeof _date.isValid === 'function' && _date.isValid()) {\n this.setValid(null, true)\n } else {\n this.setValid(null, false)\n }\n } else if (input && input.value === '') {\n this.setValid(null, true)\n }\n\n if (from && picker) {\n picker.showMonth(dateFormatter(from).toDate())\n }\n }\n\n parseDate = (date, which) => {\n if (typeof date === 'string' && (date.length < 10)) {\n if (date.length === 0) {\n this.setParsedValid(true, which)\n } else {\n this.setParsedValid(false, which)\n }\n return\n }\n\n const _date = dateFormatter(date)\n if (_date) {\n if (typeof _date.isValid === 'function' && _date.isValid()) {\n this.setParsedValid(true, which)\n return _date.toDate()\n } else {\n this.setParsedValid(false, which)\n }\n }\n return\n }\n\n formatDate = date => {\n if (!date) {\n return date\n }\n const _date = dateFormatter(date, 'YYYY-MM-DD')\n if (_date) {\n return _date\n }\n return date\n }\n\n handleYearMonthChange = evt => {\n const { year, month, } = evt.target.form\n const targetMonth = new Date(year.value, month.value)\n this.setState({ month: targetMonth, })\n }\n\n render () {\n const { from, to, disabledDays, } = this.props\n let fromDate = dateFormatter(from)\n if (fromDate && typeof fromDate.isValid === 'function' && fromDate.isValid()) {\n fromDate = fromDate.toDate()\n }\n let toDate = dateFormatter(to)\n if (toDate && typeof toDate.isValid === 'function' && toDate.isValid()) {\n toDate = toDate.toDate()\n }\n\n const { month, } = this.state\n \n const pickerProps = {\n month,\n canChangeMonth : false,\n // Sets the target month/year to display\n modifiers : { start: fromDate, end: toDate, },\n // If there are any selected days, provide them so they can be styled\n selectedDays : [ fromDate, toDate, { fromDate, toDate, }, ],\n captionElement : ({ date, }) => {\n return \n },\n }\n\n if (Array.isArray(disabledDays) && disabledDays.length) {\n pickerProps.disabledDays = disabledDays\n }\n \n return
    \n this.fromPicker = el}\n value={from}\n placeholder={this.props.fromPlaceholder}\n format={'LL'}\n formatDate={this.formatDate}\n parseDate={date => this.parseDate(date, 'from')}\n dayPickerProps={{ ...pickerProps, }}\n onDayChange={this.handleFromChange}\n title={'From Date'}\n inputProps={{\n className : `form-control ${!this.state.fromValid ? 'is-invalid' : ''}`,\n invalid : (!this.state.fromValid).toString(),\n }}\n />\n this.toPicker = el}\n value={to}\n placeholder={this.props.toPlaceholder}\n format={'LL'}\n formatDate={this.formatDate}\n parseDate={date => this.parseDate(date, 'to')}\n dayPickerProps={{ ...pickerProps, }}\n onDayChange={this.handleToChange}\n title={'To Date'}\n inputProps={{\n className : `form-control ${!this.state.toValid ? 'is-invalid' : ''}`,\n invalid : (!this.state.toValid).toString(),\n }}\n />\n
    \n }\n}","import React from 'react'\nimport { Row, Col, Label, Input, } from 'reactstrap'\nimport { string, func, number, PropTypes, } from 'prop-types'\n\nconst NumberRange = ({ label, onChange, minName, minValue, minPlaceholder, maxName, maxValue, maxPlaceholder, }) => {\n const id = label.split(' ').join('')\n const labelName = `range-label-${id}`\n return \n \n \n \n \n \n \n \n \n \n \n}\n\nNumberRange.propTypes = {\n label : string,\n onChange : func,\n minName : string,\n minPlaceholder : string,\n minValue : PropTypes.oneOfType([ string, number, ]),\n maxName : string,\n maxPlaceholder : string,\n maxValue : PropTypes.oneOfType([ string, number, ]),\n}\n\nNumberRange.defaultProps = {\n minPlaceholder : 'Min',\n maxPlaceholder : 'Max',\n}\n\nexport default NumberRange","// Libraries\nimport React, { useMemo, } from 'react'\nimport { bool, string, func, } from 'prop-types'\nimport SearchInput from './SearchInput'\n\nconst PermitNumber = props => {\n const {\n value,\n name,\n onChange,\n onBlur,\n showPopover,\n } = props\n const popoverBody = useMemo(() => {\n return <>Use the Burn Permit Number to find Burn Requests associated with a Burn Permit.\n }, [])\n return \n}\n\nPermitNumber.propTypes = {\n name : string,\n value : string,\n onChange : func,\n onBlur : func,\n showPopover : bool,\n}\n\nPermitNumber.defaultProps = {\n name: 'BurnPermitNumber',\n}\n\nexport default React.memo(PermitNumber)\n","import React from 'react'\nimport { FormGroup, Label, Button, ButtonGroup, } from 'reactstrap'\nimport { string, func, } from 'prop-types'\n\nimport { PopoverButton, } from '../FormControls'\n\n\nexport const UGA = ({ IsUGA, onChange, }) => {\n return \n \n
    \n \n \n \n \n \n
    \n}\n\nUGA.propTypes = {\n IsUGA : string,\n onChange : func,\n}\n\nUGA.defaultProps = {\n IsUGA : '',\n onChange : () => {},\n}\n\nexport default UGA","import React from 'react'\r\nimport { FormGroup, Label, Button, ButtonGroup, } from 'reactstrap'\r\nimport { string, func, } from 'prop-types'\r\n\r\nimport { PopoverButton, } from '../FormControls'\r\n\r\n\r\nexport const ForestHealth = ({ IsForestHealthExempt, onChange, }) => {\r\n return \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n}\r\n\r\nForestHealth.propTypes = {\r\n IsForestHealthExempt : string,\r\n onChange : func,\r\n}\r\n\r\nForestHealth.defaultProps = {\r\n IsForestHealthExempt : '',\r\n onChange : () => {},\r\n}\r\n\r\nexport default ForestHealth","import React, { useCallback, useEffect, useMemo, useRef, } from 'react'\nimport { bool, number, oneOfType, string, } from 'prop-types'\nimport { Button, Col, Form, FormGroup, Input, Label, Row, } from 'reactstrap'\nimport { useDispatch, useSelector, } from 'react-redux'\n\n// Components\nimport AssociatedBurns from './AssociatedBurns'\nimport { DateRange, PermitNumber, SearchInput, } from '../../../SearchInputs'\nimport { AutoComplete, } from '../../../FormControls'\n\n// Selectors\nimport { regionsForSelectSelector, } from '../../../../selectors/regionSelectors'\nimport {\n associatedBurnsSearchParams,\n getSmokeComplaintSelector,\n smokeComplaintAssociatedBurnSearchResults,\n} from '../../../../selectors/customerInteractionSelectors'\nimport {\n countiesForSelectSelector,\n fireDistrictDepartmentsForSelectSelector,\n} from '../../../../selectors/selectors'\n\n// Reducers\nimport CustomerInteractionActions from '../../../../redux/CustomerInteractionRedux'\n\n// Hooks\nimport { useAutoComplete, useEnterPressHandler, } from '../../../Search/hooks'\n\n// Utilities\nimport { dateFormatter, } from '../../../../utilities'\n\n\nconst SearchForm = props => {\n const { CustomerInteractionId, show, } = props\n\n // Selectors\n const smokeComplaint = useSelector(state => getSmokeComplaintSelector(state, CustomerInteractionId))\n const searchResults = useSelector(smokeComplaintAssociatedBurnSearchResults)\n const searchParams = useSelector(associatedBurnsSearchParams)\n const regions = useSelector(regionsForSelectSelector)\n const counties = useSelector(countiesForSelectSelector)\n const fireDistricts = useSelector(fireDistrictDepartmentsForSelectSelector)\n\n // Redux actions\n const dispatch = useDispatch()\n\n const initialParams = useMemo(() => {\n if (!smokeComplaint || !smokeComplaint.CustomerInteractionId) {\n return\n }\n const { CustomerInteractionId, CreateDate, } = smokeComplaint\n let StartDate = dateFormatter(CreateDate, null, true).add(-1, 'day').format('YYYY-MM-DD')\n return {\n CustomerInteractionId,\n StartDate,\n EndDate : dateFormatter(CreateDate, 'YYYY-MM-DD', true),\n Radius : 50,\n BurnPermitId : '',// - In case the DNR rep knows the specific burn it's associated with\n BurnPermitNumber : '',// - In case the DNR rep knows the specific burn it's associated with\n PostBurnId : '',// - In case the DNR rep knows the specific burn it's associated with\n BurnRequestId : '',// - In case the DNR rep knows the specific burn it's associated with\n RegionId : '',\n CountyId : '',\n FireDistrictId : '',\n }\n }, [ smokeComplaint, ])\n\n // UI Callbacks\n const cancelSearch = useCallback(() => {\n dispatch(CustomerInteractionActions.toggleFindBurnsForm(false))\n }, [ dispatch, ])\n\n const resetSearch = useCallback(() => {\n dispatch(CustomerInteractionActions.findAssociatedBurns(initialParams))\n }, [ initialParams, dispatch, ])\n\n // mount effect\n useEffect(() => {\n dispatch(CustomerInteractionActions.findAssociatedBurns(initialParams))\n }, [ initialParams, dispatch, ])\n\n const prevShow = useRef(show)\n useEffect(() => {\n if (prevShow.current !== true && show === true) {\n dispatch(CustomerInteractionActions.findAssociatedBurns({ ...searchParams, submit: true, }))\n }\n prevShow.current = show\n }, [ show, searchParams, dispatch, ])\n\n const onChange = useCallback(e => {\n const { name, value, } = e.target\n const newParams = {\n ...searchParams,\n [name] : value || '',\n CustomerInteractionId : smokeComplaint.CustomerInteractionId,\n submit : false,\n }\n dispatch(CustomerInteractionActions.findAssociatedBurns(newParams))\n }, [ smokeComplaint, searchParams, dispatch, ])\n\n const updateSearchParams = useCallback(e => {\n const { name, value, } = e.target\n const newParams = {\n ...searchParams,\n [name] : value || '',\n CustomerInteractionId : smokeComplaint.CustomerInteractionId,\n }\n dispatch(CustomerInteractionActions.findAssociatedBurns(newParams))\n }, [ smokeComplaint, searchParams, dispatch, ])\n\n const onSearchClick = useCallback(() => {\n const newParams = {\n ...searchParams,\n submit: true,\n }\n dispatch(CustomerInteractionActions.findAssociatedBurns(newParams))\n }, [ searchParams, dispatch, ])\n\n const onSubmittedDateChosen = useCallback(({ from, to, }) => {\n const newParams = {\n ...searchParams,\n StartDate : dateFormatter(from || '', 'YYYY-MM-DD'),\n EndDate : dateFormatter(to || '', 'YYYY-MM-DD'),\n CustomerInteractionId : smokeComplaint.CustomerInteractionId,\n submit : false,\n }\n dispatch(CustomerInteractionActions.findAssociatedBurns(newParams))\n }, [ smokeComplaint, searchParams, dispatch, ])\n\n const onAutoComplete = useCallback(e => {\n const { name, id, value, } = e.target\n const newParams = {\n ...searchParams,\n [name] : value || '',\n [`${name}Id`] : id || '',\n CustomerInteractionId : smokeComplaint.CustomerInteractionId,\n submit : false,\n }\n dispatch(CustomerInteractionActions.findAssociatedBurns(newParams))\n }, [ smokeComplaint, searchParams, dispatch, ])\n\n const [ regionAutoChange, ] = useAutoComplete('Region', onAutoComplete)\n const [ countyAutoChange, ] = useAutoComplete('County', onAutoComplete)\n const [ fireDistrictChange, ] = useAutoComplete('FireDistrict', onAutoComplete)\n\n const handleKeyPress = useEnterPressHandler(onSearchClick)\n\n if (!show) {\n return null\n }\n\n return
    \n Back\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Reset\n \n \n Search\n \n \n
    \n \n
    \n}\n\nSearchForm.propTypes = {\n CustomerInteractionId : oneOfType([ number, string, ]),\n show : bool,\n}\n\nexport default React.memo(SearchForm)\n","import React from 'react'\nimport { bool, func, } from 'prop-types'\nimport { Button, } from 'reactstrap'\n\n\nconst FindBurnsBtn = props => {\n const { onClick, show, } = props\n if (!show) {\n return null\n }\n return (\n
    \n Find Burns\n
    \n )\n}\n\nFindBurnsBtn.propTypes = {\n show : bool,\n onClick : func,\n}\n\nexport default React.memo(FindBurnsBtn)\n","import React, { useCallback, useEffect, useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport {\n Button,\n ButtonGroup,\n Modal,\n ModalBody,\n ModalHeader,\n} from 'reactstrap'\nimport { bool, func, number, oneOfType, string, } from 'prop-types'\n\n// Hooks\nimport { useShowModal, } from '../../../../hooks'\n\n// Reducers\nimport { CustomerInteractionTypes, } from '../../../../redux/CustomerInteractionRedux'\n\n// Selectors\nimport {\n smokeComplaintassociatedBurns,\n smokeComplaintAssociationFormIsVisible,\n} from '../../../../selectors/customerInteractionSelectors'\nimport { appStateSelector, } from '../../../../selectors/appSelectors'\n\n// Components\nimport SearchForm from './SearchForm'\nimport AssociatedBurns from './AssociatedBurns'\nimport FindBurnsBtn from './FindBurnsBtn'\nimport LoadingBar from '../../../LoadingBar'\n\n\nconst ActionBtn = props => {\n const className = useMemo(() => {\n let iconClasses = 'fa fa-plus'\n if (props.isAdd) {\n iconClasses = 'fa fa-minus'\n }\n return iconClasses\n }, [ props.isAdd, ])\n return \n}\n\nActionBtn.propTypes = {\n isAdd : bool,\n onClick : func,\n}\n\nconst LinkBurnDialog = props => {\n const { CustomerInteractionId, userIsDnr, } = props\n\n // Selectors\n const associatedBurns = useSelector(state => smokeComplaintassociatedBurns(state, CustomerInteractionId))\n const showForm = useSelector(smokeComplaintAssociationFormIsVisible)\n const { showLoading, } = useSelector(appStateSelector)\n\n // Redux actions\n const dispatch = useDispatch()\n\n // UI Callbacks\n const [ isOpen, openModal, closeModal, ] = useShowModal(dispatch, 'LINK_BURNS')\n\n const hasBurns = useMemo(() => (Array.isArray(associatedBurns) && associatedBurns.length), [ associatedBurns, ])\n\n const btnText = useMemo(() => {\n let text = 'Burns'\n if (hasBurns) {\n return `${associatedBurns.length} ${text}`\n }\n return 'Link ' + text\n }, [ hasBurns, associatedBurns, ])\n\n const modalText = useMemo(() => {\n let text = 'Burns'\n if (showForm) {\n return 'Link ' + text\n }\n return 'Associated ' + text\n }, [ showForm, ])\n\n useEffect(() => {\n if (userIsDnr && !showForm) {\n dispatch({\n type : CustomerInteractionTypes.GET_ASSOCIATED_BURNS,\n id : CustomerInteractionId,\n })\n }\n }, [ showForm, CustomerInteractionId, userIsDnr, dispatch, ])\n\n const viewAssociatedBurns = useCallback(() => {\n dispatch({\n type : CustomerInteractionTypes.TOGGLE_FIND_BURNS_FORM,\n show : false,\n })\n openModal()\n }, [ openModal, dispatch, ])\n\n const findBurns = useCallback(() => {\n dispatch({\n type : CustomerInteractionTypes.TOGGLE_FIND_BURNS_FORM,\n show : true,\n })\n }, [ dispatch, ])\n\n const addEditBurns = useCallback(() => {\n findBurns()\n openModal()\n }, [ openModal, findBurns, ])\n\n const modalBodyStyle = useMemo(() => ({ minHeight: '53vh', }), [])\n const loadingBarStyle = useMemo(() => ({\n top : 0,\n zIndex : 10,\n display : showLoading ? 'block': 'none',\n }), [ showLoading, ])\n\n if (userIsDnr !== true) {\n return null\n }\n\n return <>\n \n {btnText}\n \n \n \n {modalText}\n \n \n \n \n \n \n \n \n}\n\nLinkBurnDialog.propTypes = {\n CustomerInteractionId : oneOfType([ string, number, ]),\n userIsDnr : bool,\n}\n\nexport default React.memo(LinkBurnDialog)\n","import React, { useCallback, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { useNavigate, } from 'react-router-dom'\nimport { Button, } from 'reactstrap'\nimport { string, } from 'prop-types'\n\n// Selectors\nimport { lastRouteSelector, } from '../../selectors/appSelectors'\nimport { isModalOpen, } from '../../selectors/uiSelectors'\n\n// Components\nimport ConfirmationModal from '../ConfirmationModal'\n\n// Redux\nimport UiActions from '../../redux/UiRedux'\nimport { userIsDNR, } from '../../selectors/userSelectors'\n\nconst modalKey = 'CANCEL_COMPLAINT'\n\nconst CustomerInteraction = props => {\n const { interactionType, } = props\n // Selectors\n const lastRoute = useSelector(lastRouteSelector)\n const isOpen = useSelector(state => isModalOpen(state, modalKey))\n const userIsDnr = useSelector(userIsDNR)\n\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n // UI Callbacks\n const cancelInteraction = useCallback(() => {\n dispatch(UiActions.openModal(modalKey))\n }, [ dispatch, ])\n\n const confirmCancel = useCallback(() => {\n dispatch(UiActions.closeModal())\n navigate(lastRoute)\n }, [ dispatch, navigate, lastRoute, ])\n\n if (userIsDnr) {\n return null\n }\n\n const markup = <>\n \n Cancel\n \n return markup\n}\n\nCustomerInteraction.propTypes = {\n interactionType: string,\n}\n\nexport default React.memo(CustomerInteraction)\n","import React, { useCallback, useEffect, useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { string, } from 'prop-types'\nimport { useFormikContext, } from 'formik'\n\n// Components\nimport ESRIMap from '../ESRIMap'\n\n// Redux\nimport MapActions from '../../redux/MapRedux'\n\n// Selectors\nimport { latLongSelector, mapStateSelector, } from '../../selectors/mapSelectors'\nimport { regionsForSelectSelector, } from '../../selectors/regionSelectors'\n\n// Map\nimport { REGIONS, } from '../../config/map/featureLayers'\n\n\nconst CustomerInteractionsMap = props => {\n const {\n layerTitle,\n mapConfig,\n popupTitle,\n } = props\n\n const { setFieldValue, } = useFormikContext()\n\n // Selectors\n const { Latitude, Longitude, } = useSelector(latLongSelector)\n const regions = useSelector(regionsForSelectSelector)\n const { MapActive, MapLoading, } = useSelector(mapStateSelector)\n\n // Redux actions\n const dispatch = useDispatch()\n\n // mount effect\n useEffect(() => {\n dispatch(MapActions.getLatLongFromMap(true, true))\n }, [ dispatch, ])\n\n const mapData = useMemo(() => {\n const eventLocData = []\n if (Latitude && Longitude && MapActive && !MapLoading) {\n eventLocData.push(\n {\n geometry: {\n type : 'point',\n latitude : Latitude,\n longitude : Longitude,\n },\n attributes: {\n Latitude,\n Longitude,\n },\n popupTemplate: {\n popupTitle : popupTitle || layerTitle,\n content : [\n {\n type : 'fields',\n fieldInfos : [\n {\n fieldName: 'Longitude',\n },\n {\n fieldName: 'Latitude',\n },\n ],\n },\n ],\n },\n }\n )\n setFieldValue('Latitude', Latitude)\n setFieldValue('Longitude', Longitude)\n }\n return [\n {\n layerId : 'customerInteractionlocation',\n layerTitle,\n data : eventLocData,\n },\n ]\n }, [ Latitude, Longitude, popupTitle, layerTitle, MapActive, MapLoading, setFieldValue, ])\n\n const intersectingFeatures = useCallback(intersecting => {\n // no data, just return\n if (!Array.isArray(intersecting) || !intersecting.length) {\n return\n }\n // Filter out any extra layers (when handling map result)\n const [ region, ] = intersecting.filter(f => f.layerId === REGIONS.id)\n const [ matchingRegion, ] = regions.filter(r => r.Text === region.attributes.JURISDICT_LABEL_NM)\n if (matchingRegion && 'Value' in matchingRegion && MapActive && !MapLoading) {\n setFieldValue('RegionId', matchingRegion.Value)\n }\n }, [ regions, MapActive, MapLoading, setFieldValue, ])\n\n const targetFeatureLayerIds = useMemo(() => ([ REGIONS.id, ]), [])\n\n return \n}\n\nCustomerInteractionsMap.propTypes = {\n layerTitle : string,\n mapConfig : string,\n popupTitle : string,\n}\n\nexport default React.memo(CustomerInteractionsMap)\n","import React, { useMemo, } from 'react'\nimport { useSelector, } from 'react-redux'\nimport { number, oneOfType, string, } from 'prop-types'\nimport { Table, } from 'reactstrap'\n\n// Selectors\nimport {\n customerInteractionStatusesByIdSelector,\n} from '../../../selectors/customerInteractionSelectors'\n\n// Utilities\nimport { \n renderCheckIcon,\n renderCheckOrXIcon,\n renderDateTime,\n} from '../../../utilities/columnHelpers'\n\n\nconst StatusTable = props => {\n const { CustomerInteractionId, } = props\n\n // Selectors\n const customerInteractionStatuses = useSelector(state => customerInteractionStatusesByIdSelector(state, CustomerInteractionId))\n\n // UI Callbacks\n const trs = useMemo(() => {\n return customerInteractionStatuses.map((v, idx) => {\n return \n {v.StatusName}\n {renderDateTime(v.StatusDate, 'display')}\n {v.AssignedTo}\n {v.Comment}\n {renderCheckOrXIcon(v.CommentInternalOnly, 'display', true)}\n {renderCheckIcon(v.ContactedReportingParty, 'display', true)}\n {v.CreateBy}\n \n })\n }, [ customerInteractionStatuses, ])\n\n return \n \n \n \n \n \n \n \n \n \n \n \n {trs}\n
    StatusStatus DateAssigned ToCommentInternal OnlyContacted ReporterCreated By
    \n}\n\nStatusTable.propTypes = {\n CustomerInteractionId: oneOfType([ number, string, ]),\n}\n\nexport default React.memo(StatusTable)\n","import React, { useCallback, useMemo, } from 'react'\nimport { useSelector, useDispatch, } from 'react-redux'\nimport { func, number, oneOfType, string, } from 'prop-types'\nimport { Field, Form, Formik, } from 'formik'\nimport * as Yup from 'yup'\nimport { Button, Col, FormGroup, Row, } from 'reactstrap'\n\n// Reducers\nimport CustomerInteractionActions from '../../../redux/CustomerInteractionRedux'\n\n// Selectors\nimport { customerInteractionStatusesSelector, } from '../../../selectors/customerInteractionSelectors'\n\n// Components\nimport {\n AssignedStaff,\n RequiredLabel,\n Select,\n ValidatingField,\n YesNoButtonGroup,\n} from '../../FormControls'\nimport AssignToMe from '../../FormControls/AssignToMe'\n\n// Icons\nimport RequiredIndicator from '../../Icons/RequiredIndicator'\n\n\nconst CUSTOMER_INTERACTION_STATUS_SCHEMA = Yup.object().shape({\n CustomerInteractionId : Yup.number().required().min(1, 'A Customer Interaction ID must be set'),\n CustomerInteractionStatusId : Yup.number().required('You must choose an status'),\n AssignedTo : Yup.string().ensure().required('You must assign someone'),\n AssignedToId : Yup.string().ensure().required('You must assign someone'),\n Comment : Yup.string().ensure().required('You must provided a comment'),\n CommentInternalOnly : Yup.bool().required('You must choose Yes or No'),\n ContactedReportingParty : Yup.bool().required('You must choose Yes or No'),\n})\n\nconst StatusForm = props => {\n const { CustomerInteractionId, onCancelClick, } = props\n\n // Selectors\n const statuses = useSelector(customerInteractionStatusesSelector)\n\n // Redux actions\n const dispatch = useDispatch()\n\n // UI Callbacks\n const submitStatus = useCallback(values => {\n dispatch(CustomerInteractionActions.createCustomerInteractionStatus(values))\n }, [ dispatch, ])\n\n const _onCancelClick = useCallback(() => {\n if (typeof onCancelClick === 'function') {\n onCancelClick()\n }\n }, [ onCancelClick, ])\n\n const initValues = useMemo(() => ({\n CustomerInteractionId,\n CustomerInteractionStatusId : '',\n AssignedToId : '',\n Comment : '',\n CommentInternalOnly : '',\n ContactedReportingParty : '',\n }), [ CustomerInteractionId, ])\n\n return \n
    \n \n All labels with the indicate required inputs.\n \n \n {\n ({ field, form, }) => (\n \n )\n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Is this comment for internal use only?\n \n \n \n \n \n \n Did you contact the reporting party?\n \n \n \n \n \n Provide a comment for this status update.\n \n \n \n \n \n
    \n Cancel\n Reset\n
    \n Submit\n \n
    \n \n \n}\n\nStatusForm.propTypes = {\n CustomerInteractionId : oneOfType([ number, string, ]),\n onCancelClick : func,\n}\n\nexport default React.memo(StatusForm)\n","import React, { useCallback, useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { Button, Fade, Modal, ModalBody, ModalHeader, } from 'reactstrap'\nimport { number, oneOfType, string, } from 'prop-types'\n\n// Selectors\nimport { userIsDNR, } from '../../../selectors/userSelectors'\nimport {\n customerInteractionStatusFormOpenSelector,\n customerInteractionStatusesByIdSelector,\n} from '../../../selectors/customerInteractionSelectors'\n\n// Components\nimport StatusTable from './StatusTable'\nimport StatusForm from './StatusForm'\n\n// Hooks\nimport { useShowModal, } from '../../../hooks'\n\n// Reducers\nimport { CustomerInteractionTypes, } from '../../../redux/CustomerInteractionRedux'\n\n\nconst CustomerInteractionStatus = props => {\n const { CustomerInteractionId, } = props\n\n const dispatch = useDispatch()\n\n // Selectors\n const userIsDnr = useSelector(userIsDNR)\n const showForm = useSelector(customerInteractionStatusFormOpenSelector)\n const customerInteractionStatuses = useSelector(state => customerInteractionStatusesByIdSelector(state, CustomerInteractionId))\n\n const [ statusModalOpen, setModalOpen, closeModal, ] = useShowModal(dispatch, 'CUSTOMER_INTERACTION_STATUS_DIALOG')\n\n const latestStatus = useMemo(() => {\n if (Array.isArray(customerInteractionStatuses) && customerInteractionStatuses.length) {\n const [ { StatusName, }, ] = customerInteractionStatuses\n return StatusName\n }\n return 'Unassigned'\n }, [ customerInteractionStatuses, ])\n\n const addStatus = useCallback(() => {\n dispatch({\n type : CustomerInteractionTypes.SHOW_CUSTOMER_INTERACTION_STATUS_FORM,\n showForm : true,\n })\n }, [ dispatch, ])\n const cancelStatus = useCallback(() => {\n dispatch({\n type : CustomerInteractionTypes.SHOW_CUSTOMER_INTERACTION_STATUS_FORM,\n showForm : false,\n })\n }, [ dispatch, ])\n\n const statusClick = useCallback(() => (setModalOpen()), [ setModalOpen, ])\n const statusStyle = useMemo(() => ({ fontSize: '1.5em', }), [])\n const modalSize = useMemo(() => (showForm ? 'lg' : 'xl'), [ showForm, ])\n const modalBodyStyle = useMemo(() => ({ minHeight: '53vh', }), [])\n\n if (userIsDnr !== true) {\n return null\n }\n\n const markup = <>\n

    Status:

    \n \n {latestStatus}\n \n \n Smoke Complaint #{CustomerInteractionId} - Status\n \n \n \n \n \n
    \n Add Status\n
    \n \n
    \n
    \n
    \n \n return markup\n}\n\nCustomerInteractionStatus.propTypes = {\n CustomerInteractionId: oneOfType([ number, string, ]),\n}\n\nexport default React.memo(CustomerInteractionStatus)\n","import React, { useCallback, useEffect, useMemo, useState, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { useNavigate, useParams, } from 'react-router-dom'\nimport { Field, Form, Formik, } from 'formik'\nimport { bool, } from 'prop-types'\nimport { Button, Card, CardBody, CardText, Col, Container, FormGroup, Label, Row, } from 'reactstrap'\n\n// Hooks\nimport { useInterval, useShowModal, } from '../../../hooks'\n\n// Redux\nimport MapActions from '../../../redux/MapRedux'\nimport AppActions from '../../../redux/AppRedux'\nimport CustomerInteractionActions from '../../../redux/CustomerInteractionRedux'\n\n// Components\nimport TourSteps from './TourSteps'\nimport LatLongEffect from './LatLongEffect'\nimport FollowUpForm from './FollowUpForm'\nimport ValidationSchema from './ValidationSchema'\nimport { LinkBurnRequest, } from './LinkBurn'\nimport CancelInteraction from '../CancelInteraction'\nimport CustomerInteractionsMap from '../CustomerInteractionsMap'\nimport StatusDialog from '../Status/StatusDialog'\nimport {\n FormTour,\n RequiredLabel,\n ValidatingField,\n YesNoButtonGroup,\n} from '../../FormControls'\n\n// Selectors\nimport { appIsOnlineSelector, } from '../../../selectors/selectors'\nimport { userIsDNR, } from '../../../selectors/userSelectors'\nimport {\n createdInteractionIdSelector,\n customerInteractionStateSelector,\n getSmokeComplaintSelector,\n smokeCompMapStateSelector,\n userAcknowledgedSmokeComplaintPrompt,\n} from '../../../selectors/customerInteractionSelectors'\n\n// Models\nimport BurnPermitLocation from '../../../models/BurnPermitLocation'\n\n// Icons\nimport RequiredIndicator from '../../Icons/RequiredIndicator'\n\n\nconst { Latitude, Longitude, } = BurnPermitLocation.fields\n\n\nconst interactionType = 'Smoke'\n\nconst StatusBtn = props => {\n const dispatch = useDispatch()\n const [ , setModalOpen, ] = useShowModal(dispatch, 'CUSTOMER_INTERACTION_STATUS_DIALOG')\n const statusClick = useCallback(() => (setModalOpen()), [ setModalOpen, ])\n if (!props.userIsDnr) {\n return null\n }\n\n return Change Status\n}\n\nStatusBtn.propTypes = {\n userIsDnr: bool,\n}\n\nconst SmokeForm = () => {\n const { id, } = useParams()\n const [ mapCheckDelay, setMapCheckDelay, ] = useState(300)\n const [ showTour, setShowTour, ] = useState(false)\n\n // Selectors\n const online = useSelector(appIsOnlineSelector)\n const userIsDnr = useSelector(userIsDNR)\n const successId = useSelector(createdInteractionIdSelector)\n const acknowledged = useSelector(userAcknowledgedSmokeComplaintPrompt)\n const smokeComplaint = useSelector(state => getSmokeComplaintSelector(state, id))\n const { tourCompleted, } = useSelector(state => customerInteractionStateSelector(state, interactionType))\n const { location, regionId, } = useSelector(smokeCompMapStateSelector)\n\n // Redux actions\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n // mount effect\n useEffect(() => {\n let title = 'Smoke Complaint'\n if (id) {\n title += ` #${id}`\n }\n else {\n title = `New ${title}`\n }\n dispatch(AppActions.setPageTitle(title))\n dispatch(MapActions.clearLatLong())\n dispatch(CustomerInteractionActions.newCustomerInteraction(interactionType))\n }, [ id, dispatch, ])\n\n useEffect(() => {\n if (userIsDnr !== true) {\n if (!id && successId > 0) {\n navigate('/smokecomplaints/success')\n }\n else if (parseInt(id) > 0 && !successId) {\n navigate('/')\n }\n return\n }\n if (!id && successId > 0) {\n navigate(`/smokecomplaints/${successId}`)\n }\n else if (parseInt(id) > 0) {\n dispatch(CustomerInteractionActions.getCustomerInteraction(id))\n }\n }, [ successId, id, userIsDnr, dispatch, navigate, ])\n\n useEffect(() => {\n if (smokeComplaint.Latitude && smokeComplaint.Longitude) {\n dispatch(MapActions.setLatLong(smokeComplaint.Latitude, smokeComplaint.Longitude))\n }\n }, [ smokeComplaint.Latitude, smokeComplaint.Longitude, dispatch, ])\n\n useEffect(() => {\n if ((smokeComplaint && (!smokeComplaint.Latitude || !smokeComplaint.Longitude)) && (location && location.x && location.y)) {\n dispatch(MapActions.setLatLong(location.y.toFixed(5), location.x.toFixed(5)))\n }\n }, [ location, smokeComplaint, dispatch, ])\n\n const formIsReadOnly = useMemo(() => {\n if (!online) {\n return true\n }\n if (userIsDnr !== true && parseInt(id) > 0) {\n return true\n }\n return false\n }, [ online, userIsDnr, id, ])\n\n const fieldIsReadOnly = useMemo(() => {\n if (!online) {\n return true\n }\n if (userIsDnr && parseInt(id) > 0) {\n return true\n }\n return false\n }, [ online, userIsDnr, id, ])\n\n const handleReset = useCallback(values => {\n const { Latitude, Longitude, } = values\n dispatch(MapActions.setLatLong(Latitude, Longitude))\n }, [ dispatch, ])\n\n const submitComplaint = useCallback(values => {\n dispatch(CustomerInteractionActions.submitSmokeComplaint({\n ...values,\n RegionId: values.RegionId || regionId || '',\n }))\n }, [ regionId, dispatch, ])\n\n const acknowledgeSmokePrompt = useCallback(() => {\n dispatch(CustomerInteractionActions.smokePromptAcknowledged())\n }, [ dispatch, ])\n\n const onFinished = useCallback(() => (\n // Need to set our running state to false, so we can restart if we click start again.\n dispatch(CustomerInteractionActions.tourCompleted(interactionType))\n ), [ dispatch, ])\n\n const updateLocation = useCallback((e) => {\n const { name, value, } = e.target\n let _Latitude, _Longitude\n if (name === 'Latitude') {\n _Latitude = value || ''\n }\n else {\n _Longitude = value || ''\n }\n dispatch(MapActions.setLatLong(_Latitude, _Longitude))\n }, [ dispatch, ])\n\n const getLatLong = useCallback((e) => {\n const { value, } = e.target\n if (!smokeComplaint.Latitude || !smokeComplaint.Longitude) {\n dispatch(CustomerInteractionActions.geocodeCustIntAddress(value))\n }\n }, [ smokeComplaint, dispatch, ])\n\n const acknowledgeSize = useMemo(() => ({ offset: 3, size: 6, }), [])\n\n useInterval(() => {\n const layerListExists = document.getElementsByClassName('esri-icon-layer-list')\n if (layerListExists.length) {\n setMapCheckDelay(null)\n setShowTour(true)\n }\n else {\n setMapCheckDelay(mapCheckDelay)\n }\n }, mapCheckDelay)\n\n const headerText = useMemo(() => {\n let _headerText = 'Smoke Complaint'\n if (id && parseInt(id) > 0) {\n _headerText += ` #${id}`\n }\n else {\n _headerText = `New ${_headerText}`\n }\n return _headerText\n }, [ id, ])\n\n const tourSteps = useMemo(() => (TourSteps({ isDnr: userIsDnr, })), [ userIsDnr, ])\n const flexEndStyle = useMemo(() => ({ marginTop: '-1em', columnGap: '1.5em', }), [])\n\n if (acknowledged !== true && userIsDnr !== true) {\n return \n

    {headerText}

    \n \n \n \n \n \n Please provide as much detail as possible about the nature of your complaint \n including the following details:\n \n
      \n
    • A description of the impacts, duration of the event, etc.
    • \n
    • An address where the event occurred and/or
    • \n
    • Latitude and Longitude of the location of the event
    • \n
    • Contact information if you wish to have DNR follow up with you
    • \n
    \n \n \n I acknowledge\n \n \n
    \n
    \n \n
    \n
    \n }\n\n const submitText = userIsDnr\n ? 'Modify'\n : 'Submit'\n\n const markup = \n \n \n

    \n {headerText}\n

    \n \n \n \n \n
    \n \n
    \n \n
    \n \n \n \n \n \n \n \n \n \n \n All labels with the indicate required inputs.\n \n \n Provide a brief description of the Smoke Event you observed.\n \n \n \n \n \n

    Click anywhere on the map to modify the Lat/Long

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n \n \n Would you like a DNR Representative follow-up with you?\n \n \n \n \n
    \n
    \n \n
    \n \n \n
    \n \n Reset\n
    \n
    \n \n {submitText}\n
    \n \n
    \n \n
    \n \n \n
    \n return markup\n}\n\nexport default React.memo(SmokeForm)\n","// Libraries\nimport React from 'react'\nimport { PropTypes, } from 'prop-types'\n\nimport $ from 'jquery'\nimport 'datatables.net'\nimport 'datatables.net-bs4'\nimport 'datatables.net-buttons/js/buttons.colVis'\nimport 'datatables.net-buttons/js/buttons.html5'\nimport 'datatables.net-buttons/js/buttons.print'\n\nimport 'datatables.net-bs4/css/dataTables.bootstrap4.css'\nimport 'datatables.net-buttons-bs4/css/buttons.bootstrap4.css'\n\nconst defaultConfig = {\n dom : '<\\'row d-flex flex-direction-row\\'<\\'col-6 col-md-4\\'l><\\'col-md-4 table-buttons\\'B><\\'col-6 col-md-4\\'f>>rtip',\n rowId : '_fields.id',\n language : { \n search : '_INPUT_',\n searchPlaceholder : 'Filter',\n },\n scrollX : true,\n lengthMenu : [ [ 10, 25, 50, 100, -1, ], [ 10, 25, 50, 100, 'All', ], ],\n stateSave : true,\n buttons : [ 'colvis', ],\n}\n\n\nconst SimpleDataTable = ({\n elementId = '',\n className = '',\n width = '100%',\n config = null,\n children,\n}) => {\n const tableRef = React.useRef(null)\n const dataTableRef = React.useRef(null)\n let data = config && config.data ? config.data : null\n\n React.useEffect(() => {\n const table = tableRef, dataTable = dataTableRef\n return () => {\n if (dataTable.current) {\n dataTable.current.destroy({ remove: false, })\n dataTable.current = null\n } \n table.current = null\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n React.useEffect(() => {\n if (!data || !dataTableRef || !dataTableRef.current) {\n return\n }\n const dt = dataTableRef.current\n dt.clear()\n dt.rows.add(data)\n dt.draw()\n }, [ data, ])\n\n React.useEffect(() => {\n const table = tableRef, dataTable = dataTableRef\n if (!table.current || dataTable.current) {\n return\n }\n\n if (config) {\n dataTable.current = $(table.current).DataTable({ \n ...defaultConfig,\n language: { ...defaultConfig.language, },\n ...config,\n })\n } else {\n dataTable.current = $(table.current).DataTable({ \n ...defaultConfig,\n })\n }\n }, [ config, ])\n\n return (\n {children}\n )\n}\n\nSimpleDataTable.propTypes = {\n elementId : PropTypes.string.isRequired,\n className : PropTypes.string,\n config : PropTypes.object,\n children : PropTypes.node,\n width : PropTypes.string,\n}\n\nexport default React.memo(SimpleDataTable)\n","import React, { useCallback, useEffect, useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { useNavigate, } from 'react-router-dom'\nimport { Button, Card, CardBody, Col, Container, Form, FormGroup, Label, Row, } from 'reactstrap'\n\n// Hooks\nimport {\n useAutoComplete,\n useEnterPressHandler,\n useSearchLookupsFetch,\n} from '../../Search/hooks'\nimport { useTableCellLink, } from '../../../hooks'\n\n// Utilities\nimport { dateFormatter, } from '../../../utilities'\nimport { formatAddress, renderCheckIcon, renderLatLong, } from '../../../utilities/columnHelpers'\n\n// Redux\nimport AppActions from '../../../redux/AppRedux'\nimport CustomerInteractionActions from '../../../redux/CustomerInteractionRedux'\n\n// Selectors\nimport {\n custIntSearchParamsSelector,\n customerInteractionStatusesSelector,\n searchComplaintsSelector,\n smokeCompMapStateSelector,\n smokeComplaintTypeId,\n} from '../../../selectors/customerInteractionSelectors'\nimport { regionsForSelectSelector, } from '../../../selectors/regionSelectors'\n\n// Components\nimport ESRIMap from '../../ESRIMap'\nimport SimpleTable from '../../SimpleTable'\nimport { DateRange, PermitNumber, SearchInput, } from '../../SearchInputs'\nimport { AssignedStaff, AutoComplete, Select, } from '../../FormControls'\n\n// Map\nimport { customerInteractionAction, } from '../../../config/map/actions'\n\n\nconst layerId = 'smokecomplaints'\nconst fields = [\n {\n name : 'CustomerInteractionId',\n label : 'ID',\n },\n {\n name: 'Status',\n },\n {\n name : 'AssignedTo',\n label : 'Assigned To',\n },\n {\n name : 'StatusDate',\n label : 'Latest Status Date',\n },\n {\n name : 'SubmitterName',\n label : 'Submitter name',\n },\n {\n name : 'InteractionDescription',\n label : 'Description',\n },\n {\n name : 'FollowUp',\n label : 'Follow up?',\n },\n {\n name: 'Region',\n },\n {\n name: 'Address',\n },\n {\n name: 'Longitude',\n },\n {\n name: 'Latitude',\n },\n {\n name : 'CreateBy',\n label : 'Created By',\n },\n {\n name : 'CreateDate',\n label : 'Created Date',\n },\n {\n name : 'UpdateBy',\n label : 'Update By',\n },\n {\n name : 'UpdateDate',\n label : 'Updated Date',\n },\n]\n\nconst SmokeSearch = () => {\n // State and refs\n const navigate = useNavigate()\n\n // Selectors\n const complaintTypeId = useSelector(smokeComplaintTypeId)\n const { center, zoom, showMap, } = useSelector(smokeCompMapStateSelector)\n const searchParams = useSelector(state => custIntSearchParamsSelector(state, complaintTypeId))\n const complaints = useSelector(searchComplaintsSelector)\n const statuses = useSelector(customerInteractionStatusesSelector)\n const regions = useSelector(regionsForSelectSelector)\n\n // Redux actions\n const dispatch = useDispatch()\n\n useSearchLookupsFetch(dispatch, true)\n // UI Callbacks\n\n useEffect(() => {\n dispatch(AppActions.setPageTitle('Smoke Complaint Search'))\n if (complaintTypeId > 0) {\n dispatch(CustomerInteractionActions.newCustomerInteraction(complaintTypeId))\n }\n }, [ complaintTypeId, dispatch, ])\n\n const onClearClick = useCallback(() => {\n dispatch(CustomerInteractionActions.clearCustomerInteractionSearch())\n }, [ dispatch, ])\n\n const onChange = useCallback(e => {\n const { name, value, } = e.target\n const newParams = {\n ...searchParams,\n [name]: value || '',\n }\n newParams.submit = false\n dispatch(CustomerInteractionActions.searchCustomerInteractions(newParams))\n }, [ searchParams, dispatch, ])\n\n const onAutoComplete = useCallback(e => {\n const { name, id, value, } = e.target\n const newParams = {\n ...searchParams,\n [name] : value || '',\n [`${name}Id`] : id || '',\n }\n newParams.submit = false\n dispatch(CustomerInteractionActions.searchCustomerInteractions(newParams))\n }, [ searchParams, dispatch, ])\n\n const [ assignedStaffChange, ] = useAutoComplete('AssignedTo', onAutoComplete)\n\n const [ regionAutoChange, ] = useAutoComplete('Region', onAutoComplete)\n\n const onSubmittedDateChosen = useCallback(({ from, to, }) => {\n const newParams = {\n ...searchParams,\n SubmittedOnAfter : dateFormatter(from || '', 'YYYY-MM-DD'),\n SubmitteOnBefore : dateFormatter(to || '', 'YYYY-MM-DD'),\n }\n newParams.submit = false\n dispatch(CustomerInteractionActions.searchCustomerInteractions(newParams))\n }, [ searchParams, dispatch, ])\n\n const linkCellCallback = useTableCellLink({ route: 'smokecomplaints', })\n\n const config = useMemo(() => {\n return {\n columns: [\n {\n title : 'ID',\n data : 'CustomerInteractionId',\n width : 50,\n },\n {\n title : 'Name',\n data : 'SubmitterName',\n },\n {\n title : 'Description',\n data : 'InteractionDescription',\n },\n {\n title : 'Address',\n data : 'Address',\n visible : false,\n render : formatAddress,\n },\n {\n title : 'Lat / Long',\n data : 'LatLong',\n visible : false,\n render : renderLatLong,\n },\n {\n title : 'Status',\n data : 'Status',\n },\n {\n title : 'Wants Follow Up',\n data : 'FollowUp',\n render : renderCheckIcon,\n },\n {\n title : 'Assigned To',\n data : 'AssignedTo',\n },\n {\n title : 'Region',\n data : 'Region',\n },\n {\n title : 'Created',\n render : (_, __, { CreateBy, CreateDate, }) => {\n const date = dateFormatter(CreateDate, 'YYYY-MM-DD @ HH:MM:SS')\n return `${CreateBy} - ${date}`},\n },\n {\n title : 'Updated',\n visible : false,\n render : (_, __, { UpdateBy, UpdateDate, }) => {\n if (UpdateBy) {\n const date = dateFormatter(UpdateDate, 'YYYY-MM-DD @ HH:MM:SS')\n return `${UpdateBy} - ${date}`\n }\n return ''\n },\n },\n ],\n columnDefs: [\n {\n targets : 0,\n createdCell : linkCellCallback,\n },\n ],\n data : complaints,\n scrollY : '60vh',\n scrollCollapse : true,\n order : [],\n rowCallback : (row) => row.classList.add('no-click'),\n buttons : [ 'colvis', 'excel', 'print', 'csv', 'pdf', ],\n }\n }, [ complaints, linkCellCallback, ])\n\n /**\n * Search button handler, update redux with new search values \n */\n const onSearchClick = useCallback(() => {\n const submitParams = { ...searchParams, submit: true, }\n dispatch(CustomerInteractionActions.searchCustomerInteractions(submitParams))\n }, [ searchParams, dispatch, ])\n\n const handleKeyPress = useEnterPressHandler(onSearchClick)\n\n const toggleMap = useCallback(() => {\n dispatch(CustomerInteractionActions.toggleCustomerInteractionMap())\n }, [ dispatch, ])\n\n const mapBtnText = useMemo(() => {\n return showMap\n ? 'Hide Map'\n : 'Show Map'\n }, [ showMap, ])\n\n const mapColStyle = useMemo(() => ({ height: '530px', }), [])\n const mapClass = useMemo(() => {\n let classString = 'map-container rounded'\n if (showMap) {\n classString += ' my-1'\n }\n else {\n classString += ' d-none'\n }\n return classString\n }, [ showMap, ])\n\n const mapData = useMemo(() => {\n let eventLocData = []\n if (Array.isArray(complaints) && complaints.length) {\n const fieldInfos = fields.map(({ name, label, }) => ({ fieldName: name, label, }))\n eventLocData = complaints\n .filter(comp => (comp.Latitude && comp.Longitude))\n .map(comp => {\n const { Latitude, Longitude, } = comp\n return {\n geometry: {\n type : 'point',\n latitude : Latitude,\n longitude : Longitude,\n },\n attributes : { ...comp, },\n popupTemplate : {\n title : 'Smoke Event Location Lat/Long',\n content : [\n {\n type: 'fields',\n fieldInfos,\n },\n ],\n },\n }\n })\n }\n return [\n {\n layerId,\n layerTitle : 'Smoke Event Locations',\n data : eventLocData,\n fields : [],\n idField : 'CustomerInteractionId',\n actions : [ customerInteractionAction.bind({ navigate, })(layerId, layerId, 'View Complaint'), ],\n },\n ]\n }, [ complaints, navigate, ])\n\n return \n

    Smoke Complaints

    \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Clear\n \n \n
    \n \n {mapBtnText}\n \n Search\n
    \n \n
    \n \n
    \n
    \n \n \n \n \n \n \n
    \n}\n\nexport default React.memo(SmokeSearch)\n","import React, { useEffect, useMemo, } from 'react'\nimport { useSelector, useDispatch, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { Card, CardBody, CardHeader, CardText, Col, Container, Row, } from 'reactstrap'\n\n// Reducers\nimport AppActions from '../../../redux/AppRedux'\nimport CustomerInteractionActions from '../../../redux/CustomerInteractionRedux'\n\n// Selectors\nimport { lastRouteSelector, } from '../../../selectors/appSelectors'\n\n// Icons\nimport { SuccessIcon, } from '../../Icons'\n\n\nconst SmokeSuccess = () => {\n const lastRoute = useSelector(lastRouteSelector)\n const dispatch = useDispatch()\n\n useEffect(() => {\n dispatch(AppActions.setPageTitle('Smoke Complaint Submitted'))\n dispatch(CustomerInteractionActions.upsertCustomerInteractionSuccess({ id: null, }))\n }, [ dispatch, ])\n\n const colSizes = useMemo(() => ({ size: '6', offset: '3', }), [])\n return (\n \n \n \n \n Smoke Complaint Submitted \n \n \n Your Smoke Complaint has been submitted successfully!\n \n \n If you requested\n to have follow up from DNR and provided valid contact information, a \n DNR Representative will be in contact with you soon.\n \n
    \n Back to where you were\n Go to the Home Page\n
    \n
    \n
    \n \n
    \n
    \n )\n}\n\nexport default React.memo(SmokeSuccess)\n","import React from 'react'\nimport { array, string, } from 'prop-types'\n\nconst Tile = (props) => {\n const { title, children, } = props\n return (\n
    \n
    \n {title}\n
    \n
    \n
      \n { children.map((child, index) =>
    • {child}
    • ) }\n
    \n
    \n
    \n )\n}\n\nTile.propTypes = {\n children : array,\n title : string,\n}\n\nexport default Tile","import React from 'react'\nimport { PropTypes, string, } from 'prop-types'\nimport { Alert, Row, Col, } from 'reactstrap'\n\nconst alertSetup = (color, text, icon, key) => {\n return \n \n \n {icon}\n \n \n

    {text}

    \n \n
    \n
    \n}\n\nfunction Notices ({ messages, }) {\n const { Info, Warning, } = messages\n // This is to prevent collission with the Alert component from reactstrap\n const AlertMsg = messages.Alert\n const markup = []\n if (AlertMsg) {\n markup.push(alertSetup('danger', AlertMsg, , 'danger-notice'))\n }\n if (Warning) {\n markup.push(alertSetup('warning', Warning, , 'warning-notice'))\n }\n if (Info) {\n markup.push(alertSetup('primary', Info, , 'info-notice'))\n }\n return markup\n}\n\nNotices.propTypes = {\n messages: PropTypes.shape({\n Info : string,\n Warning : string,\n Alert : string,\n }),\n}\n\nNotices.defaultProps = {\n messages: {\n Info : null,\n Warning : null,\n Alert : null,\n },\n}\n\nexport default Notices","import { createSelector, } from 'reselect'\r\n\r\nconst dashboardSelector = state => state.Dashboard\r\n\r\nexport const tileLinkSelector = createSelector(\r\n dashboardSelector,\r\n state => state.TileLinks\r\n)\r\n\r\nexport const dashMsgsSelector = createSelector(\r\n dashboardSelector,\r\n ({ Messages = {}, }) => {\r\n if (!Messages) {\r\n Messages = {}\r\n }\r\n return {\r\n Alert : Messages.Alert || null,\r\n Warning : Messages.Warning || null,\r\n Info : Messages.Info || null,\r\n }\r\n }\r\n)","// Libraries\nimport React, { useCallback, useEffect, useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { Link, useNavigate, } from 'react-router-dom'\nimport { Container, Row, Col, } from 'reactstrap'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport DashboardActions from '../redux/DashboardRedux'\n\n// Components\nimport ESRIMap from '../components/ESRIMap'\nimport { Tile, Notices, } from '../components/Dashboard'\nimport ExternalLink from '../components/ExternalLink'\n\n// Layers\nimport GeoJsonLayers from '../config/map/geojsonLayers'\n\n// Selectors\nimport { tileLinkSelector, dashMsgsSelector, } from '../selectors/dashboardSelectors'\nimport { appIsOnlineSelector, } from '../selectors/selectors'\n\n\nconst DashboardContainer = () => {\n\n // Hooks\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n // Selectors\n const online = useSelector(appIsOnlineSelector)\n const TileLinks = useSelector(tileLinkSelector)\n const Messages = useSelector(dashMsgsSelector)\n\n // OnMount / OneTime\n useEffect(() => {\n dispatch(AppActions.setPageTitle('Burn Portal - WA DNR'))\n dispatch(DashboardActions.getTileLinks())\n if (online) {\n dispatch(DashboardActions.getDashMsgs())\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const renderLinks = useCallback(links => {\n if (Array.isArray(links) !== true) {\n return []\n }\n return links.map((l, i) => {\n if (!l) {\n return null\n }\n return \n })\n }, [])\n\n const layerActionObj = useMemo(() => ({ navigate, }), [ navigate, ])\n const geojsonLayers = useMemo(() => GeoJsonLayers.map(l => l.bind(layerActionObj)()), [ layerActionObj, ])\n\n return \n

    Burn Portal

    \n \n \n \n \n \n \n \n \n \n Search Permits\n Apply For A Permit\n { renderLinks(TileLinks.Permit) }\n \n \n \n \n \n \n Search Burn Requests\n Submit Burn Request\n { renderLinks(TileLinks.Smoke) }\n \n \n \n \n \n \n \n
    \n \n { renderLinks(TileLinks.BurnRestrictions) }\n \n
    \n \n \n
    \n \n { renderLinks(TileLinks.AirQuality) }\n \n
    \n \n \n
    \n \n { renderLinks(TileLinks.StateLaw) }\n \n
    \n \n \n
    \n \n { renderLinks(TileLinks.Helpful) }\n \n
    \n \n
    \n
    \n}\n\nexport default React.memo(DashboardContainer)","// Libraries\r\nimport React, { useCallback, } from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { isEmpty, } from 'lodash'\r\nimport { bool, func, array, object, string, PropTypes, number, } from 'prop-types'\r\nimport { Button, Container, Row, Col, ModalHeader, ModalBody, ModalFooter, Modal, Table, Badge, } from 'reactstrap'\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\nconst ModalTd = ({ children, }) => {\r\n return {children}\r\n}\r\n\r\nModalTd.propTypes = {\r\n children: PropTypes.node,\r\n}\r\n\r\nconst CalendarModal = ({\r\n toggleModal,\r\n modalOpen = false,\r\n title,\r\n iconText,\r\n icon,\r\n status,\r\n id,\r\n eventLink,\r\n eventDetails = [],\r\n viewOnMap,\r\n}) => {\r\n let iconHeader = null\r\n if (icon) {\r\n iconHeader = \r\n \r\n \r\n \r\n {iconText}\r\n \r\n \r\n \r\n }\r\n\r\n const eventDetailRows = eventDetails.map((d, idx) => {\r\n return \r\n {d.Label}\r\n {d.Value}\r\n \r\n })\r\n\r\n if (!isEmpty(status)) {\r\n eventDetailRows.unshift(\r\n Status\r\n {status.Value}\r\n )\r\n }\r\n\r\n const onMapLinkClick = useCallback((e) => {\r\n stopEvent(e)\r\n viewOnMap(id)\r\n },[ id, viewOnMap, ])\r\n\r\n const footerLink = !isEmpty(eventLink) ? {eventLink.Text} : null\r\n const mapLink = viewOnMap ? : null\r\n\r\n return \r\n \r\n { title }\r\n \r\n \r\n {iconHeader}\r\n \r\n \r\n {eventDetailRows}\r\n \r\n
    \r\n
    \r\n {mapLink} {footerLink}\r\n
    \r\n}\r\n\r\nCalendarModal.propTypes = {\r\n eventLink : object,\r\n status : object,\r\n id : number,\r\n eventDetails : array,\r\n toggleModal : func,\r\n modalOpen : bool,\r\n title : string,\r\n iconText : string,\r\n icon : string,\r\n viewOnMap : func,\r\n}\r\n\r\nexport default CalendarModal","// Libraries\nimport { createSelector, } from 'reselect'\n\n// Selectors\nimport { authPropsSelector, } from './userSelectors'\n\n// Utilities\nimport { dateFormatter, pacificTimeZoneDate, } from '../utilities'\nimport { formatLegalDesc, } from '../utilities/columnHelpers'\n\n// Map Config\nimport { GetRequestSymbolByStatus, } from '../config/map/symbols'\nimport { burnRequestAction, } from '../config/map/actions'\n\n\nexport const calendarStateSelector = (state) => {\n return state && state.Calendar ? state.Calendar : {}\n}\n\nconst calendarEventsSelector = createSelector(\n calendarStateSelector,\n calendar => calendar ? calendar.events || [] : []\n)\n\nconst mapBurnRequestsForCalendar = (multiBurnReqEvents) => (r) => {\n // Javascript assumes all dates are tracked in UTC\n // The ignition and request dates we get from the API have zeroes set for the hours, minutes seconds\n // but it does not have any associated timezone information\n // Since we're 8 hours behind, Safari is displaying the literal UTC time for midnight UTC of the date,\n // which is actually 4 PM the day before in our local time zone\n // startDate.setHours(startDate.getHours() + startDate.getTimezoneOffset() / 60)\n const [ hours, minutes, seconds, ] = r.PlannedIgnitionTime.split(':')\n // To display the correct date value and have the events display on the correct day,\n // we must update the hours to compensate for the timezone offset, which is returned in minutes\n const startDate = pacificTimeZoneDate(r.PlannedIgnitionDate, hours, minutes, seconds)\n const endDate = new Date(startDate)\n // We do not need to manipulate the end date since it is built off of the updated startDate\n endDate.setMinutes(endDate.getMinutes() + r.PlannedIgnitionPeriod)\n\n const reqDate = new Date(r.BurnRequestDate)\n // Similarly update the request date to handle the timezone offset\n reqDate.setHours(reqDate.getHours() + reqDate.getTimezoneOffset() / 60)\n\n let color, badgeClass, textColor = '#fff'\n switch(r.BurnRequestStatus) {\n case 'Submitted':\n badgeClass = 'dark'\n color = '#003d6b'\n break\n case 'Info Required':\n case 'Under Review':\n badgeClass = 'secondary'\n color = '#996007'\n break\n case 'Denied':\n badgeClass = 'danger'\n color = '#EA1B0B'\n break\n case '[Division] Approved':\n case '[Region] Approved':\n case 'Approved':\n badgeClass = 'success'\n color = '#53ae76'\n break\n case 'Cancelled':\n default:\n badgeClass = 'light'\n color = '#eee'\n textColor = '#212121'\n break\n }\n\n // Default to showing the permit number for all users\n let prefix = r.BurnPermitNumber\n\n // Authenticated users can access the Agent and Landowner names\n // Prioritize displaying the Agent name\n if (r.Agent.trim() !== '') {\n prefix = r.Agent.trim()\n }\n // But if there is no Agent name but there is a Landowner\n // name, then show that\n else if (r.Landowner.trim() !== '') {\n prefix = r.Landowner.trim()\n }\n\n const eventDetails = [\n { Label: 'Burn Request ID', Value: r.BurnRequestId, },\n { Label: 'Burn Permit #', Value: r.BurnPermitNumber, },\n { Label: 'Unit Name', Value: r.BurnUnitName, },\n { Label: 'Planned Ignition Date', Value: dateFormatter(startDate, 'ddd MMM DD, YYYY'), },\n { Label: 'Planned Ignition Time', Value: r.PlannedIgnitionTime, },\n { Label: 'Planned Ignition Period', Value: `${(r.PlannedIgnitionPeriod || '').toLocaleString()} minutes`, },\n { Label: 'Burn Type(s)', Value: r.BurnType, },\n { Label: 'Burn Request Date', Value: dateFormatter(reqDate, 'ddd MMM DD, YYYY'), },\n { Label: 'Permitted Burn Area', Value: `${(r.BurnAcres || '').toLocaleString()} acres`, },\n { Label: 'Requested Burn Area', Value: `${(r.ProposedBurnArea || '').toLocaleString()} acres`, },\n { Label: 'Permitted Tonnage', Value: `${(r.TotalPermitTonnage || '').toLocaleString()} tons`, },\n { Label: 'Proposed Burn Quantity', Value: `${(r.TotalProposedBurnQuantity || '').toLocaleString()} tons`, },\n { Label: 'Lat, Long', Value: `${r.Latitude}, ${r.Longitude}`, },\n ]\n\n // If the prefix is different than the permit number, it means the user\n // has access to see the Agent and Landowner info, so make sure those\n // fields are visible in the event details\n const showLandownerAgent = prefix !== r.BurnPermitNumber\n if (showLandownerAgent) {\n eventDetails.splice(eventDetails.findIndex(e => e.Label === 'Burn Permit #'), 0, { Label: 'Landowner', Value: r.Landowner, })\n eventDetails.splice(eventDetails.findIndex(e => e.Label === 'Burn Permit #'), 0, { Label: 'Agent', Value: r.Agent, })\n }\n\n let icon = '', iconText = ''\n if (r.IsUGA) {\n icon = 'fas fa-city'\n iconText = 'Burn is within a UGA'\n }\n else if (r.IsForestHealthExempt) {\n icon = 'fas fa-tree'\n iconText = 'Burn has a Forest Health Exemption'\n }\n\n let multiBurn = ''\n \n // given multi-day events come in as one, append to array with updated events (will not be iterated over)\n if (r.MultiDayBurn) {\n multiBurn = 'fas fa-m'\n r.PlannedDays = []\n // mock Planned Days until API is upated.\n // let test_date = new Date(startDate)\n // r.PlannedDays.push(test_date.setDate(test_date.getDate() + 1))\n if (r.PlannedDays.length > 0) {\n r.PlannedDays.forEach(day => {\n let multiStartDate = new Date(day)\n let multiEndDate = new Date(day)\n multiEndDate.setHours(multiEndDate.getHours() + r.PlannedIgnitionTime)\n let multiEventDetails = [ ...eventDetails, ]\n multiEventDetails[3] = { Label: 'Planned Ignition Date', Value: dateFormatter(multiStartDate, 'ddd MMM DD, YYYY'), }\n const newEvent = {\n title : `${prefix} - ${(r.TotalProposedBurnQuantity || '').toLocaleString()} tons`,\n start : multiStartDate,\n end : multiEndDate,\n color : color,\n textColor : textColor,\n // These are available in the `event` object under `event.extendedProps`\n Id : r.BurnRequestId,\n icon : icon,\n iconText : iconText,\n multiBurn : multiBurn,\n EventLink : {\n Url : `/burn-requests/${r.BurnRequestId}`,\n Text : 'View Burn Request',\n },\n Status: {\n Value : r.BurnRequestStatus || 'Unknown',\n Color : badgeClass,\n },\n eventDetails: multiEventDetails,\n }\n multiBurnReqEvents.push(newEvent)\n })\n \n }\n }\n\n return {\n title : `${prefix} - ${(r.TotalProposedBurnQuantity || '').toLocaleString()} tons`,\n start : startDate,\n end : endDate,\n color : color,\n textColor : textColor,\n // These are available in the `event` object under `event.extendedProps`\n Id : r.BurnRequestId,\n icon : icon,\n iconText : iconText,\n multiBurn : multiBurn,\n EventLink : {\n Url : `/burn-requests/${r.BurnRequestId}`,\n Text : 'View Burn Request',\n },\n Status: {\n Value : r.BurnRequestStatus || 'Unknown',\n Color : badgeClass,\n },\n eventDetails,\n }\n}\n\nexport const calendarDataSelector = createSelector(\n calendarEventsSelector,\n (calendarData) => {\n return calendarData.map(mapBurnRequestsForCalendar(calendarData))\n }\n)\n\nexport const calendarMapDataSelector = createSelector(\n (_, navigate) => navigate,\n calendarEventsSelector,\n authPropsSelector,\n (navigate, calendarData, { isAuthenticated = false, }) => {\n\n const fields = [\n { name: 'BurnPermitNumber', label: 'Burn Permit Number', },\n { name: 'Status', label: 'Status', },\n { name: 'StatusDate', label: 'Status Date', },\n { name: 'MultiDay', label: 'Multi Day Burn', },\n { name: 'HasPostBurn', label: 'Has Burned', },\n { name: 'BurnTypes', label: 'Burn Types', },\n { name: 'Address', label: 'Address', },\n { name: 'LegalDesc', label: 'Legal Desc.', },\n { name: 'HarvestAcres', label: 'Harvest Acres', },\n { name: 'ExpirationDate',label: 'Expiration Date', },\n { name: 'RequestedAcres', label: 'Requested Acres', },\n { name: 'TotalPermitTonnage', label: 'Est. Permit Tonnage', },\n { name: 'RequestedTons', label: 'Requested Tons', },\n { name: 'PlannedIgnitionDate', label: 'Planned Ignition Date', },\n { name: 'PlannedIgnitionTime', label: 'Planned Ignition Time', },\n { name: 'IsUGA', label: 'Is in UGA', },\n { name: 'IsForestHealthExempt', label: 'Is Forest Health Exempt', },\n { name: 'UnitName', label: 'Burn Unit Name', },\n { name: 'LatLong', label: 'Lat, Long', },\n ]\n\n if (isAuthenticated) {\n const landowner = { name: 'Landowner', label: 'Landowner', }\n const agent = { name: 'Agent', label: 'Agent', }\n fields.splice(fields.findIndex(c => c.name === 'HasPostBurn'), 0, landowner)\n fields.splice(fields.findIndex(c => c.name === 'HasPostBurn'), 0, agent)\n }\n\n const layer = {\n layerId : 'BurnRequests',\n layerTitle : 'Burn Requests',\n data : [],\n fields,\n idField : 'BurnRequestId',\n title : 'Burn Request #{BurnRequestId}',\n }\n\n let data = calendarData.reduce((prev, curr) => {\n if (!!curr.Longitude && !!curr.Latitude) {\n prev.push(curr)\n }\n return prev\n }, [])\n\n if (data.length <= 0) {\n return [ layer, ]\n }\n \n for (let i = 0, len = data.length; i < len; i++) {\n const row = data[i]\n const {\n Latitude,\n Longitude,\n BurnPermitId,\n BurnPermitNumber,\n Address,\n BurnAcres,\n BurnTypes,\n BurnUnitName,\n BurnRequestId,\n BurnPermitExpirationDate,\n PlannedIgnitionDate,\n PlannedIgnitionTime,\n TotalPermitTonnage,\n RequestedAcres,\n RequestedTons,\n BurnRequestStatus,\n BurnRequestStatusDate,\n IsUGA,\n IsForestHealthExempt,\n } = row\n\n let Agent = '', Landowner = ''\n if (isAuthenticated) {\n Agent = row.Agent\n Landowner = row.Landowner\n }\n \n const symbol = GetRequestSymbolByStatus(BurnRequestStatus, IsUGA)\n layer.data.push({\n geometry: {\n type : 'point',\n latitude : Latitude,\n longitude : Longitude,\n },\n attributes: {\n BurnRequestId : BurnRequestId.toString(),\n BurnPermitId : BurnPermitId.toString(),\n Agent,\n Landowner,\n BurnPermitNumber,\n BurnTypes,\n Address,\n PlannedIgnitionDate : dateFormatter(PlannedIgnitionDate, 'MMM DD, YYYY'),\n PlannedIgnitionTime,\n RequestedAcres,\n TotalPermitTonnage,\n RequestedTons,\n UnitName : BurnUnitName,\n LegalDesc : formatLegalDesc(row),\n Status : BurnRequestStatus,\n StatusDate : dateFormatter(BurnRequestStatusDate, 'MMM DD, YYYY'),\n ExpirationDate : dateFormatter(BurnPermitExpirationDate, 'MMM DD, YYYY'),\n HarvestAcres : BurnAcres,\n IsUGA : IsUGA ? 'Yes' : 'No',\n IsForestHealthExempt : IsForestHealthExempt === null ? 'N/A' : IsForestHealthExempt ? 'Yes' : 'No',\n LatLong : `${Latitude}, ${Longitude}`,\n },\n symbol,\n })\n }\n layer.actions = [ burnRequestAction.bind({ navigate, })(), ]\n return [ layer, ] \n }\n)\n\n","// Libraries\nimport React, { useRef, useCallback, useEffect, useReducer, useMemo, } from 'react'\nimport { Container, Row, Col, Badge, Fade, Button, } from 'reactstrap'\nimport FullCalendar from '@fullcalendar/react'\nimport dayGridPlugin from '@fullcalendar/daygrid'\nimport timeGridPlugin from '@fullcalendar/timegrid'\nimport bootstrapPlugin from '@fullcalendar/bootstrap'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { useNavigate, } from 'react-router-dom'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport CalendarActions from '../redux/CalendarRedux'\n\n// Components\nimport ESRIMap from '../components/ESRIMap'\nimport { RowToggler, } from '../components/FormControls'\nimport CalendarModal from '../components/CalendarModal'\n\n// Hooks\nimport { useToggle, } from '../hooks'\n\n// Utils/Selectors\nimport { \n calendarStateSelector, \n calendarMapDataSelector, \n calendarDataSelector, \n} from '../selectors/calendarSelectors'\nimport { dateFormatter, } from '../utilities'\n\n\nfunction calendarReducer (state, action) {\n if (!action || !action.type) {\n return state\n }\n switch (action.type) {\n case 'DISPLAY_MODAL': {\n if (!action.payload || !action.payload.event) {\n return state\n }\n const { title, extendedProps, } = action.payload.event\n return {\n ...state,\n modalData: {\n title : title,\n iconText : extendedProps.iconText,\n icon : extendedProps.icon,\n status : extendedProps.Status,\n id : extendedProps.Id,\n eventLink : extendedProps.EventLink,\n eventDetails : extendedProps.eventDetails,\n },\n modalOpen: true,\n }\n }\n case 'TOGGLE_MODAL': \n return { ...state, modalOpen: !state.modalOpen, }\n case 'TOGGLE_MAP': \n return { ...state, showMap: !state.showMap, }\n case 'SHOW_ON_MAP':\n if (!action.payload || !action.payload.id) {\n return state\n }\n return {\n ...state,\n modalOpen : false,\n showMap : true,\n requestToShow : action.payload.id.toString(),\n }\n case 'REQUEST_SHOWN':\n return {\n ...state,\n requestToShow: '',\n }\n case 'MAP_READY' :\n return {\n ...state,\n mapReady: true,\n }\n default:\n break\n }\n return state\n}\n\n// calendar event render callback\nconst eventRender = (info) => {\n if (info && info.el) {\n info.el.title = info.el.innerText\n if (info.event.extendedProps.icon) {\n const icon = document.createElement('i')\n icon.className = info.event.extendedProps.icon\n icon.classList.add('mr-1')\n info.el.querySelector('.fc-title').insertAdjacentElement('beforebegin', icon)\n }\n if(info.event.extendedProps.multiBurn) {\n const multiBurnIcon = document.createElement('i')\n multiBurnIcon.className = info.event.extendedProps.multiBurn\n multiBurnIcon.classList.add('mr-1')\n info.el.querySelector('.fc-title').insertAdjacentElement('beforebegin', multiBurnIcon)\n }\n }\n}\n\nconst CalendarContainer = () => {\n // component state\n const [ state, calendarDispatch, ] = useReducer(calendarReducer,\n {\n modalData : null,\n modalOpen : false,\n showMap : false,\n requestToShow : '',\n mapReady : false,\n }\n )\n\n // component reducer callbacks\n const toggleMap = useCallback(() => calendarDispatch({ type: 'TOGGLE_MAP', }), [])\n const onMapReady = useCallback(({ layer, }) => {\n if (layer && layer.id === 'BurnRequests'){\n calendarDispatch({ type: 'MAP_READY', })\n }\n }, [])\n const toggleModal = useCallback(() => calendarDispatch({ type: 'TOGGLE_MODAL', }), [])\n const displayModal = useCallback(({ event = null, }) => calendarDispatch({ type: 'DISPLAY_MODAL', payload: { event, }, }), [])\n const viewOnMap = useCallback((id) => calendarDispatch({ type: 'SHOW_ON_MAP', payload: { id, }, }), [])\n\n // component state\n const { modalData, modalOpen, showMap, mapReady, requestToShow, } = state\n const mapClass = `map-container rounded ${showMap ? 'my-1': 'd-none'}`\n const [ legendShowing, toggleLegend, ] = useToggle(false)\n const mapRef = useRef(null)\n\n const navigate = useNavigate()\n\n // redux state\n const dispatch = useDispatch()\n const {\n dataStartDate,\n viewStartDate,\n viewType,\n } = useSelector(calendarStateSelector)\n const events = useSelector(calendarDataSelector)\n const mapLayer = useSelector((state) => calendarMapDataSelector(state, navigate))\n\n // mount effect\n useEffect(() => {\n dispatch(AppActions.setPageTitle('Burn Calendar'))\n }, [ dispatch, ])\n\n // unmount effect\n useEffect(() => {\n const mr = mapRef\n return () => {\n if (mr && mr.current) {\n mr.current = null\n }\n }\n }, [])\n\n // calender datesRender callback\n const calendarRender = useCallback((evt) => {\n const { activeStart, type, currentStart, currentEnd, } = evt.view\n // don't dispatch the changes unless the type or start date has changed\n if (viewType === type && dataStartDate === activeStart.toJSON()) {\n return\n }\n let { activeEnd, } = evt.view\n // Always subtract a millisecond from the end date\n // since this seems to be affecting all view types\n let modifiedEndDate = dateFormatter(activeEnd, null, true)\n const offset = modifiedEndDate.utcOffset()\n modifiedEndDate = modifiedEndDate.subtract(Math.abs(offset), 'minute').subtract(1, 'millisecond')\n dispatch(CalendarActions.setStartEnd(dateFormatter(activeStart, 'YYYY-MM-DD'), dateFormatter(modifiedEndDate, 'YYYY-MM-DD'), currentStart.toJSON(), currentEnd.toJSON(), type))\n }, [ dispatch, dataStartDate, viewType, ])\n\n // effect to show request on map\n useEffect(() => {\n if (!mapReady || !mapRef || !mapRef.current || !requestToShow) {\n return\n }\n const { view, } = mapRef.current\n // close any open popup\n view.popup.close()\n // find the burn request layer\n const brLayer = view.layerViews.items.find(l => l.layer.id === 'BurnRequests')\n if (!brLayer) {\n console.warn('Unable to find burn request layer.')\n return\n }\n // get a handle on the layer's graphics\n brLayer.queryGraphics().then(\n // success callback\n graphics => {\n const viewRef = view\n // search for the burn request graphic\n const targetGraphic = graphics.find(g => g.getAttribute('BurnRequestId') === requestToShow)\n if (!targetGraphic) {\n console.warn('Unable to find burn request graphic.')\n return\n }\n // open the popup\n viewRef.goTo(targetGraphic.geometry).then(() => {\n viewRef.popup.open({ features: [ targetGraphic, ], location: targetGraphic.geometry, })\n // trigger the zoom action on the request's popup\n viewRef.popup.triggerAction(1)\n })\n calendarDispatch({ type: 'REQUEST_SHOWN', })\n },\n // failure callback\n err => console.error(err)\n )\n }, [ mapReady, requestToShow, ])\n\n const mapRowStyle = useMemo(() => {\n let height = '0px'\n if (showMap) {\n height = '530px'\n }\n return { height, overflow: 'hidden', }\n }, [ showMap, ])\n\n const rowToggleStyle = useMemo(() => ({ margin: 'auto 0', }), [])\n\n const header = useMemo(() => (\n {\n left : 'today prev,next',\n center : 'title',\n right : 'dayGridMonth,dayGridWeek,dayGridDay',\n }\n ), [])\n const buttonText = useMemo(() => (\n {\n today : 'Today',\n month : 'Month',\n week : 'Week',\n day : 'Day',\n }\n ), [])\n const plugins = useMemo(() => (\n [\n dayGridPlugin,\n timeGridPlugin,\n bootstrapPlugin,\n ]\n ), [])\n\n const toggleBtnText = useMemo(() => {\n let btnText = 'Show Map'\n if (showMap) {\n btnText = 'Hide Map'\n }\n return btnText\n }, [ showMap, ])\n\n return \n \n \n \n

    Burn Calendar

    \n \n
    \n \n
    \n \n
    \n \n \n Calendar Legend\n \n \n
      \n
    • Submitted
    • \n
    • Cancelled
    • \n
    • Under Review / Info Required
    • \n
    • Approved
    • \n
    • Denied
    • \n
    • - Burn is in a UGA
    • \n
    • - Burn has a Forest Health Exemption
    • \n
    • - Multi-Day Burn Request
    • \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n}\n\nexport default React.memo(CalendarContainer)","//Libraries\nimport React from 'react'\nimport { Button, } from 'reactstrap'\nimport { bool, func, number, string, PropTypes, } from 'prop-types'\n\n// Components\nimport { PopoverButton, } from '../FormControls'\n\n//Utilities\nimport stopEvent from '../../utilities/stopEvent'\n\n\nconst CartButton = props => {\n return
    \n \n

    Click the Add \n

    \n}\n\nCartButton.propTypes = {\n onClick : func,\n disabled : bool,\n badgeValue : PropTypes.oneOfType([ number, string, ]),\n}\n\nCartButton.defaultProps = {\n onClick : () => {},\n disabled : false,\n badgeValue : '',\n}\n\nexport default CartButton","//Libraries\r\nimport React from 'react'\r\nimport { bool, number, } from 'prop-types'\r\nimport { Alert, } from 'reactstrap'\r\n// import { Prompt, } from 'react-router-dom'\r\n\r\n\r\nconst CartAlert = props => {\r\n if (!props.visible) {\r\n return null\r\n }\r\n return <>\r\n \r\n

    \r\n Creating a new Order: \r\n {props.orderItemCount === 0 && ' No applications selected'}\r\n {props.orderItemCount === 1 && ' 1 application selected'}\r\n {props.orderItemCount > 1 && ' ' + props.orderItemCount + ' applications selected'}.\r\n

    \r\n { props.enablePrompt &&

    If you refresh the page, your cart will be emptied.

    }\r\n
    \r\n {/* TODO: handle replacing Prompt\r\n */}\r\n \r\n}\r\n\r\nCartAlert.propTypes = {\r\n visible : bool,\r\n orderItemCount : number,\r\n enablePrompt : bool,\r\n}\r\n\r\nCartAlert.defaultProps = {\r\n enablePrompt: false,\r\n}\r\n\r\nexport default CartAlert","// Libraries\nimport React from 'react'\nimport { bool, func, array, string, number, } from 'prop-types'\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, } from 'reactstrap'\n\n// Components\nimport BurnPermitCartSummary from './BurnPermitCartSummary'\nimport ConfirmationModal from '../../components/ConfirmationModal'\nimport RemovePermitFromOrderModal from './RemovePermitFromOrderModal'\n\n\nconst EMPTY_CART_MODAL = 'EMPTY_CART_MODAL'\n\n\nconst CartModal = props => {\n return <>\n \n {props.headerText}\n \n \n \n \n {props.leftButtonText}\n
    \n {props.emptyCartText}\n {props.rightButtonText}\n
    \n
    \n
    \n \n Are you sure you want to remove all Permit Applications from the Cart?

    }\n cancelActionLabel={'No'}\n submitActionLabel={'Yes'}\n submitAction={props.confirmEmptyClick}\n submitArgs={[ true, ]}\n />\n \n}\n\nCartModal.propTypes = {\n modalKey : string,\n orderId : number,\n idToRemove : string,\n isOpen : bool,\n onRemoveClick : func,\n onCheckoutClick : func,\n onCloseClick : func,\n onEmptyCartClick : func,\n confirmRemoveClick : func,\n confirmEmptyClick : func,\n permitIds : array,\n size : string,\n leftButtonColor : string,\n leftButtonText : string,\n emptyCartColor : string,\n emptyCartText : string,\n rightButtonColor : string,\n rightButtonText : string,\n headerText : string,\n removePermitMessage : string,\n removePermitTitle : string,\n}\n\nCartModal.defaultProps = {\n isOpen : false,\n size : 'lg',\n onRemoveClick : () => {},\n onCheckoutClick : () => {},\n onCloseClick : () => {},\n onEmptyCartClick : () => {},\n leftButtonColor : 'information',\n leftButtonText : 'Close',\n emptyCartColor : 'danger',\n emptyCartText : 'Empty Cart',\n rightButtonColor : 'secondary',\n rightButtonText : 'Checkout',\n headerText : 'Cart Summary',\n}\n\nexport default CartModal","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { func, object, } from 'prop-types'\r\n\r\n// Components\r\nimport CartButton from './CartButton'\r\nimport CartAlert from './CartAlert'\r\nimport CartModal from './CartModal'\r\n\r\n// Reducers\r\nimport UiActions from '../../redux/UiRedux'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\nimport { REMOVE_PERMIT_MODAL, } from './RemovePermitFromOrderModal'\r\n\r\nconst EMPTY_CART_MODAL = 'EMPTY_CART_MODAL'\r\n\r\n\r\nclass Cart extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n \r\n this.emptyCartConfirm = this.emptyCartConfirm.bind(this)\r\n }\r\n\r\n static propTypes = {\r\n cart : object,\r\n cartActions : object,\r\n ShowModal : func,\r\n CloseModal : func,\r\n }\r\n \r\n static defaultProps = {\r\n enablePrompt: false,\r\n }\r\n\r\n state = {\r\n isModalVisible: false,\r\n }\r\n\r\n hideCart = evt => {\r\n stopEvent(evt)\r\n this.setState({ isModalVisible: false, })\r\n }\r\n\r\n emptyCart = evt => {\r\n stopEvent(evt)\r\n this.props.ShowModal(EMPTY_CART_MODAL)\r\n }\r\n\r\n emptyCartConfirm (evt) {\r\n stopEvent(evt)\r\n // CloseModal is called twice intentionally\r\n // Without it the UI does not reset completely\r\n // Prob something to do with having two modals show simultaneously\r\n this.props.cartActions.emptyCart()\r\n this.props.CloseModal()\r\n this.setState({ isModalVisible: false, }, this.props.CloseModal)\r\n }\r\n\r\n showCart = evt => {\r\n stopEvent(evt)\r\n this.setState({ isModalVisible: true, })\r\n }\r\n\r\n removePermit = evt => {\r\n const { id, } = evt.target.dataset\r\n this.setState({ itemIdToRemove: id, }, () => {\r\n this.props.ShowModal(REMOVE_PERMIT_MODAL)\r\n })\r\n }\r\n\r\n removeItemFromCart = itemId => {\r\n this.props.cartActions.removeFromCart(itemId)\r\n return true\r\n }\r\n \r\n createOrder = evt => {\r\n stopEvent(evt)\r\n\r\n if (this.props.cart.current.length === 0) {\r\n this.setState({ validationError: 'You must select at least one permit to create an order', })\r\n return\r\n }\r\n\r\n this.props.cartActions.createOrder(this.props.cart.current)\r\n }\r\n\r\n render () {\r\n const { cart, } = this.props\r\n const { isModalVisible, itemIdToRemove, } = this.state\r\n return
    \r\n 0}\r\n orderItemCount={cart.current.length}\r\n />\r\n \r\n \r\n
    \r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ShowModal : UiActions.openModal,\r\n CloseModal : UiActions.closeModal,\r\n}\r\n\r\nexport default connect(null, mapDispatchToProps)(Cart)","import React from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Button, } from 'reactstrap'\r\nimport { func, bool, string, } from 'prop-types'\r\n\r\nimport BurnPermitSearchActions from '../redux/BurnPermitSearchRedux'\r\n\r\n\r\nconst ExportPermits = props => {\r\n const isDownloading = useSelector(state => state.BurnPermitSearch.isDownloadingExport)\r\n const dispatch = useDispatch()\r\n \r\n const onClick = React.useCallback(() => {\r\n dispatch(BurnPermitSearchActions.downloadPermitsExport())\r\n }, [ dispatch, ])\r\n\r\n return \r\n {props.buttonText}\r\n \r\n}\r\n\r\nExportPermits.propTypes = {\r\n color : string,\r\n buttonText : string,\r\n onClick : func,\r\n readOnly : bool,\r\n}\r\n\r\nExportPermits.defaultProps = {\r\n color : 'dark',\r\n buttonText : 'Export All Permits',\r\n onClick : () => {},\r\n readOnly : false,\r\n}\r\n\r\nexport default ExportPermits","import { useRef, useEffect, useCallback, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport CartActions from '../../redux/CartRedux'\nimport BurnPermitOrderActions from '../../redux/BurnPermitOrderRedux'\nimport { orderByIdSelector, } from '../../selectors/orderSelectors'\n\nconst emptyArray = []\n\n/**\n * Hook to provide access to current and previous cart state and provide redux action callbacks\n * @returns An array continaing cart data, cart actions, and the current order\n */\nexport function useCart () {\n const reduxDispatch = useDispatch()\n const currentCart = useSelector(({ Cart = null, }) => Cart ? Cart.CartItemIds : emptyArray)\n const prevCart = useRef()\n const orderId = useSelector(({ BurnPermitOrder = {}, }) => BurnPermitOrder.newBurnPermitOrderId)\n const order = useSelector((state) => orderByIdSelector(state, orderId))\n\n useEffect(() => {\n prevCart.current = currentCart\n }, [ currentCart, ])\n \n const addToCart = useCallback((id) => {\n reduxDispatch(CartActions.AddItemToCart(id))\n }, [ reduxDispatch, ])\n\n const removeFromCart = useCallback((id) => {\n reduxDispatch(CartActions.RemoveItemFromCart(id))\n }, [ reduxDispatch, ])\n\n const emptyCart = useCallback(() => {\n reduxDispatch(CartActions.EmptyCart())\n }, [ reduxDispatch, ])\n\n const createOrder = useCallback(() => {\n reduxDispatch(BurnPermitOrderActions.createBurnPermitOrder(currentCart))\n }, [ currentCart, reduxDispatch, ])\n\n useEffect(() => {\n reduxDispatch(BurnPermitOrderActions.updateOrderPermitIds(null))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return [ \n { current: currentCart, previous: prevCart.current, },\n { addToCart, removeFromCart, emptyCart, createOrder, },\n order, \n ]\n}","// Libraries\nimport React, { useEffect, useMemo, useRef, } from 'react'\nimport { render as ReactDOMRender, } from 'react-dom'\nimport { Link, useNavigate, } from 'react-router-dom'\nimport { Row, Col, Card, CardHeader, Button, CardBody, } from 'reactstrap'\nimport { bool, func, object, array, string, } from 'prop-types'\nimport { isEmpty, difference, } from 'lodash'\nimport { useDispatch, useSelector, } from 'react-redux'\n\n// Components\nimport Cart from '../PermitOrders/Cart'\nimport ESRIMap from '../ESRIMap'\nimport SimpleDataTable from '../SimpleTable'\nimport ExportPermits from '../ExportPermits'\n\n// Actions\nimport BurnPermitListActions from '../../redux/BurnPermitListRedux'\nimport BurnPermitOrderActions from '../../redux/BurnPermitOrderRedux'\n\n// Selectors\nimport { permitMapDataSelector, } from '../../selectors/burnPermitSelectors'\n\n// Models\nimport BurnPermitSearch from '../../models/BurnPermitSearch'\n\n// Utilities\nimport stopEvent from '../../utilities/stopEvent'\n\n// Map Config\nimport { permitAction, } from '../../config/map/actions'\n\n// Hooks\nimport { useCart, } from './useCart'\nimport { useGetSearchExportFilename, } from '../../hooks'\n\nconst addToCartClasses = 'fa-plus btn-success'\nconst removeFromCartClasses = 'fa-minus btn-danger'\n\nconst addToCartTitle = 'Add Application to Cart'\nconst removeFromCartTitle = 'Remove Application from Cart'\n\nconst toggleButtonState = (btn, reset = false) => {\n if (!btn) {\n return\n }\n btn.classList.remove('btn-danger')\n btn.classList.remove('fa-minus')\n btn.classList.remove('btn-success')\n btn.classList.remove('fa-plus')\n // PermitId is being added to the cart\n if (!reset) {\n btn.title = removeFromCartTitle\n btn.classList.add('btn-danger')\n btn.classList.add('fa-minus')\n }\n // PermitId is being removed from the cart\n else {\n btn.title = addToCartTitle\n btn.classList.add('btn-success')\n btn.classList.add('fa-plus')\n }\n}\n\nconst defaultLayerObj = {}\nconst mapColStyle = { height: '530px', }\n\nexport const BurnPermitTableInner = ({\n permits, \n enableCart = false,\n aboveTableContent,\n belowTableContent,\n showMap,\n showNewAppLink,\n showCardHeader = true,\n showLandownerAgent,\n isAuthenticated,\n cart, \n cartActions,\n order,\n layerConfig,\n}) => {\n const { columns, appIdColIdx, permitIdColIdx, } = React.useMemo(() => {\n const cols = BurnPermitSearch.getDataTablesColumns({ showLandownerAgent, enableCart, })\n return {\n columns : cols,\n appIdColIdx : cols.findIndex(c => c.title === 'Application Id'),\n permitIdColIdx : cols.findIndex(c => c.title === 'Order'),\n }\n }, [ enableCart, showLandownerAgent, ])\n \n const mapClass = useMemo(() => {\n let classString = 'map-container rounded'\n if (showMap) {\n classString += ' my-1'\n }\n else {\n classString += ' d-none'\n }\n return classString\n }, [ showMap, ])\n const reduxDispatch = useDispatch()\n const navigate = useNavigate()\n\n // Create a stable ref to the cart to use inside datatable render callbacks\n const cartItemsRef = useRef(cart.current)\n cartItemsRef.current = cart.current\n\n // Unmount effect\n useEffect(() => {\n return () => reduxDispatch(BurnPermitOrderActions.updateOrderPermitIds(null))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n\n // Permit map layer selector\n const permitMapLayer = useSelector((state) => {\n if (showMap) {\n const layerData = permitMapDataSelector(state, isAuthenticated)\n layerData.actions = [ permitAction.bind({ navigate, })(), ]\n return layerData\n }\n return defaultLayerObj\n })\n\n // Cart add/remove toggle callback\n const addToCart = React.useCallback((id) => {\n if (id) {\n reduxDispatch(BurnPermitOrderActions.getBurnPermitDetailForCart(id))\n cartActions.addToCart(id)\n }\n }, [ cartActions, reduxDispatch, ])\n\n // Cart add/remove toggle callback\n const onToggleItemInCart = React.useCallback((e) => {\n stopEvent(e)\n const cartRef = cartItemsRef\n if (cartRef && cartRef.current) {\n const permitId = parseInt(e.target.getAttribute('data-permit-id'))\n const permitIdIdx = cartRef.current.findIndex(id => id === permitId)\n // PermitId is being added to the cart\n if (permitIdIdx === -1) {\n // Call action to get burn permit info, site info, and burner/agent info\n addToCart(permitId)\n }\n else {\n cartActions.removeFromCart(permitId)\n }\n }\n }, [ addToCart, cartActions, ])\n\n // Update cart add/remove buttons when cart state changes\n React.useEffect(() => {\n // Skip effect if this is the first render (no previous cart data/value)\n if (!cart.previous) {\n return\n }\n\n const removedItems = difference(cart.previous, cart.current)\n for (let i = 0, len = removedItems.length; i < len; i++) {\n const permitId = removedItems[i]\n const btn = document.querySelector(`button[data-permit-id='${permitId}']`)\n toggleButtonState(btn, true)\n }\n \n const addedItems = difference(cart.current, cart.previous)\n for (let i = 0, len = addedItems.length; i < len; i++) {\n const permitId = addedItems[i]\n const btn = document.querySelector(`button[data-permit-id='${permitId}']`)\n toggleButtonState(btn)\n }\n }, [ cart, ])\n\n // When an order is created, navigate to payment\n React.useEffect(() => {\n if (order && order.BurnPermitOrderId) {\n navigate(`/permits/orders/${order.BurnPermitOrderId}/pay`)\n }\n }, [ navigate, order, ])\n\n\n const ToggleMap = React.useCallback(() => reduxDispatch(BurnPermitListActions.togglePermitMap()), [ reduxDispatch, ])\n\n // Callback for created permit ID cells\n const createdPermitIdCellCallback = React.useCallback((td, cellData, rowData) => {\n let cellToRender = td\n if (rowData.PermitOrderId) {\n cellToRender = ReactDOMRender( {\n stopEvent(e)\n navigate(`/permits/orders/${rowData.PermitOrderId}`)\n }}>{rowData.PermitOrderId}, td)\n } else {\n const cartRef = cartItemsRef\n // TODO: maybe enable this for DNR users?\n if (!rowData.BurnPermitNumber || (rowData.BurnPermitNumber && rowData.AgencyRegionApproval) || showLandownerAgent) {\n let classes = addToCartClasses, title = addToCartClasses\n if (cartRef && cartRef.current && cartRef.current.indexOf(rowData.BurnPermitId) > -1) {\n classes = removeFromCartClasses\n title = removeFromCartTitle\n }\n cellToRender = ReactDOMRender(, td)\n } else {\n cellToRender = ReactDOMRender('N/A', td)\n }\n }\n return cellToRender\n }, [ showLandownerAgent, navigate, onToggleItemInCart, ])\n\n\n // Callback for created application ID cells\n const createdAppIdCellCallback = React.useCallback((td, cellData) => {\n return ReactDOMRender(\n {\n stopEvent(e)\n navigate(`/permits/${cellData}`)\n }}>{cellData}\n , td)\n }, [ navigate, ])\n\n const getFileName = useGetSearchExportFilename('BurnPermitSearch')\n\n const dtConfig = React.useMemo(() => {\n return {\n columns,\n columnDefs: [\n {\n targets : permitIdColIdx,\n createdCell : createdPermitIdCellCallback,\n },\n {\n targets : appIdColIdx,\n createdCell : createdAppIdCellCallback,\n },\n ],\n data : permits,\n scrollY : '60vh',\n scrollCollapse : true,\n order : [],\n rowCallback : (row) => row.classList.add('no-click'),\n buttons : [\n 'colvis',\n 'excel',\n 'print',\n {\n extend : 'csvHtml5',\n filename : getFileName,\n },\n 'pdf',\n ],\n }\n }, [ appIdColIdx, columns, createdAppIdCellCallback, createdPermitIdCellCallback, permitIdColIdx, permits, getFileName, ])\n\n const mapBtnText = useMemo(() => {\n let btnText = 'Show Map'\n if (showMap) {\n btnText = 'Hide Map'\n }\n return btnText\n }, [ showMap, ])\n\n const mapData = useMemo(() => {\n let data = []\n if (!isEmpty(permitMapLayer)) {\n data = [ permitMapLayer, ]\n }\n return data\n }, [ permitMapLayer, ])\n\n return <>\n \n { showCardHeader && \n <>\n { showNewAppLink && New Application }\n \n \n \n }\n \n {aboveTableContent}\n \n \n \n \n \n \n \n \n \n \n {belowTableContent}\n \n \n \n}\n\nBurnPermitTableInner.propTypes = {\n showLandownerAgent : bool,\n enableCart : bool,\n showMap : bool,\n showNewAppLink : bool,\n showCardHeader : bool,\n permits : array,\n aboveCardContent : object,\n aboveTableContent : object,\n belowTableContent : object,\n title : string,\n isAuthenticated : bool,\n showExport : bool,\n order : object,\n cartActions : object,\n cart : object,\n layerConfig : string,\n}\n\n \n\nconst BurnPermitTable = ({\n permits, \n enableCart = false,\n aboveCardContent,\n belowTableContent,\n title,\n showMap,\n showNewAppLink,\n showCardHeader = true,\n showLandownerAgent,\n isAuthenticated,\n showExport,\n layerConfig,\n}) => { \n const [ cart, cartActions, order, ] = useCart()\n\n // Create a stable ref to the cart to use inside datatable render callbacks\n const cartItemsRef = useRef(cart.current)\n cartItemsRef.current = cart.current\n\n return <>\n
    \n

    {title}

    \n
    \n { showExport && }\n { enableCart && }\n
    \n
    \n {aboveCardContent}\n \n \n}\n\nBurnPermitTable.propTypes = {\n navigate : func,\n showLandownerAgent : bool,\n enableCart : bool,\n showMap : bool,\n showNewAppLink : bool,\n showCardHeader : bool,\n permits : array,\n aboveCardContent : object,\n aboveTableContent : object,\n belowTableContent : object,\n title : string,\n isAuthenticated : bool,\n showExport : bool,\n layerConfig : string,\n}\n\nexport default BurnPermitTable","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { object, bool, array, string, func, shape, } from 'prop-types'\r\nimport { Link, } from 'react-router-dom'\r\nimport { isEmpty, isEqual, } from 'lodash'\r\nimport { Container, Button, Row, Col, CardText, Alert, ListGroup, ListGroupItem, FormGroup, Label, ButtonGroup, } from 'reactstrap'\r\n\r\n// Components\r\nimport ConfirmationModal from '../components/ConfirmationModal'\r\nimport LoadingBar from '../components/LoadingBar'\r\nimport { SuccessIcon, } from '../components/Icons'\r\nimport { ButtonGroupButton, } from '../components/FormControls'\r\nimport BurnPermitTable from '../components/Search/BurnPermitTable'\r\n\r\n// Actions\r\nimport AppActions from '../redux/AppRedux'\r\nimport BurnPermitListActions from '../redux/BurnPermitListRedux'\r\nimport MapActions from '../redux/MapRedux'\r\nimport UiActions from '../redux/UiRedux'\r\n\r\n// Selectors\r\nimport { permitSearchSelector, } from '../selectors/burnPermitSelectors'\r\nimport { orderByIdSelector, } from '../selectors/orderSelectors'\r\nimport { usersAgencyPaysByVoucher, } from '../selectors/userSelectors'\r\nimport { userCanBeAssignedPermits, } from '../selectors/burnPermitPermissionSelectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n\r\nconst DOWNLOAD_BURN_PERMITS = 'DOWNLOAD_BURN_PERMITS'\r\n\r\n\r\nexport class BurnPermitListContainer extends React.Component {\r\n\r\n static propTypes = {\r\n GetMyBurnPermits : func,\r\n DownloadPermits : func,\r\n SetPageTitle : func,\r\n ToggleMap : func,\r\n isDnr : bool,\r\n isMapShowing : bool,\r\n permits : array,\r\n history : object,\r\n order : object,\r\n SetDownloadStatus : func,\r\n ResetDownloadStatus : func,\r\n CloseModal : func,\r\n CloseDownloadModal : func,\r\n DoneDownloadingBurnPermits : func,\r\n OpenModal : func,\r\n showModal : bool,\r\n openModalKey : string,\r\n isDownloading : bool,\r\n lastDownload : string,\r\n lastDownloadDuration : string,\r\n canBeAssigned : bool,\r\n DownloadStatuses : shape({\r\n BurnPermitsDownloaded : bool,\r\n StatusHistoryDownloaded : bool,\r\n AreaInfoDownloaded : bool,\r\n ApplicantInfoDownloaded : bool,\r\n LocationInfoDownloaded : bool,\r\n SiteInfoDownloaded : bool,\r\n PileInfoDownloaded : bool,\r\n FuelsInfoDownloaded : bool,\r\n ConditionsDownloaded : bool,\r\n MapDataDownloaded : bool,\r\n }),\r\n isGovAgent : bool,\r\n isAgent : bool,\r\n isVerifiedAgent : bool,\r\n enableCart : bool,\r\n online : bool,\r\n DownloadMapData : bool,\r\n ToggleDownloadMapData : func,\r\n }\r\n\r\n state = {\r\n validationError: '',\r\n }\r\n\r\n componentDidMount () {\r\n const { SetPageTitle, GetMyBurnPermits, } = this.props\r\n\r\n SetPageTitle('My Burn Permit Applications')\r\n GetMyBurnPermits()\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { CloseModal, openModalKey, DoneDownloadingBurnPermits, order, enableCart, } = this.props\r\n if (openModalKey === DOWNLOAD_BURN_PERMITS) {\r\n\r\n const { DownloadStatuses, } = this.props\r\n\r\n if (prevProps.DownloadMapData && !this.props.DownloadMapData && !DownloadStatuses.MapDataDownloaded) {\r\n this.props.SetDownloadStatus('MapData', true)\r\n }\r\n \r\n const downloadStatusValues = Object.values(DownloadStatuses)\r\n\r\n if (downloadStatusValues.every(s => s)) {\r\n setTimeout(() => {\r\n CloseModal()\r\n DoneDownloadingBurnPermits()\r\n }, 750)\r\n }\r\n }\r\n if (enableCart && !isEmpty(order) && !isEqual(prevProps.order, order)) {\r\n this.props.GetMyBurnPermits()\r\n }\r\n }\r\n\r\n closeDownloadModal = () => {\r\n const { openModalKey, CloseDownloadModal, } = this.props\r\n if (openModalKey === DOWNLOAD_BURN_PERMITS) {\r\n CloseDownloadModal()\r\n }\r\n }\r\n\r\n toggleMapDownload = evt => {\r\n const { classList, } = evt.target\r\n if (classList.contains('active')) {\r\n return\r\n }\r\n this.setState({ downloadMapData: !this.state.downloadMapData, })\r\n }\r\n\r\n downloadPermits = evt => {\r\n stopEvent(evt)\r\n\r\n const { OpenModal, } = this.props\r\n\r\n OpenModal(DOWNLOAD_BURN_PERMITS)\r\n }\r\n\r\n confirmDownloadPermits = () => {\r\n if (this.state.downloadMapData) {\r\n if (!this.props.isMapShowing) {\r\n this.props.ToggleMap()\r\n }\r\n this.props.ToggleDownloadMapData()\r\n }\r\n this.props.DownloadPermits()\r\n }\r\n\r\n render () {\r\n const {\r\n validationError,\r\n } = this.state\r\n\r\n const {\r\n permits,\r\n DownloadStatuses,\r\n online,\r\n enableCart,\r\n } = this.props\r\n\r\n const aboveTableContent = \r\n \r\n \r\n {\r\n this.props.canBeAssigned\r\n ? 'View the Burn Permits and Applications you\\'re assigned to here.'\r\n : (\r\n online\r\n ? <>\r\n If you're ready to pay for your Application(s), click the to allow access to your Burn Permit Applications while offline.\r\n \r\n }\r\n \r\n \r\n\r\n const belowTableContent = \r\n \r\n New Application\r\n {\r\n validationError && validationError.length > 0 && {validationError}\r\n }\r\n \r\n \r\n\r\n return \r\n \r\n \r\n { this.props.lastDownload\r\n ? <>\r\n

    You last downloaded { permits.length } Burn Permits on
    { this.props.lastDownload } which took { this.props.lastDownloadDuration }.

    \r\n This can take a couple minutes depending on your internet connection.\r\n \r\n :

    Click Download below to download the your Burn Permits for offline use.

    \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n this.state.downloadMapData && <>\r\n

    If you want access to Imagery offline, make sure to set it as your active basemap before starting the download

    \r\n

    Not all basemaps are available offline or at all zoom levels.

    \r\n Warning! Downloading map data is best performed on a fast, stable Wi-Fi connection.\r\n \r\n }\r\n
    \r\n { this.props.isDownloading && <>\r\n

    Please wait while we download your { permits.length } Burn Permits.

    \r\n \r\n { this.state.downloadMapData &&\r\n \r\n Map Data { this.props.DownloadStatuses.MapDataDownloaded && }\r\n \r\n }\r\n \r\n Burn Permits { DownloadStatuses.BurnPermitsDownloaded && }\r\n \r\n \r\n Status History { DownloadStatuses.StatusHistoryDownloaded && }\r\n \r\n \r\n Area Info { DownloadStatuses.AreaInfoDownloaded && }\r\n \r\n \r\n Applicant Info { DownloadStatuses.ApplicantInfoDownloaded && }\r\n \r\n \r\n Location Info { DownloadStatuses.LocationInfoDownloaded && }\r\n \r\n \r\n Site Info { DownloadStatuses.SiteInfoDownloaded && }\r\n \r\n \r\n Pile Info { DownloadStatuses.PileInfoDownloaded && }\r\n \r\n \r\n Fuels Info { DownloadStatuses.FuelsInfoDownloaded && }\r\n \r\n \r\n Conditions { DownloadStatuses.ConditionsDownloaded && }\r\n \r\n \r\n \r\n }\r\n }\r\n />\r\n
    \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n\r\n const { isMapShowing, } = state.BurnPermitList\r\n\r\n const { newBurnPermitOrderId, } = state.BurnPermitOrder\r\n\r\n const order = orderByIdSelector(state, newBurnPermitOrderId)\r\n\r\n const permits = permitSearchSelector(state)\r\n\r\n const { showModal, modalKey, } = state.ui.Modal\r\n\r\n const {\r\n isDownloading,\r\n lastDownloadFormatted,\r\n lastDownloadDuration,\r\n DownloadStatuses,\r\n } = state.BurnPermitList\r\n\r\n // By default, enable for SAW users that are not agents, or are verified agents, or DNR users\r\n let enableCart = !(props.isAgent && !props.isVerifiedAgent)\r\n // However, if the user is an agent for a gov't agency\r\n if (props.isGovAgent) {\r\n // Enable the cart if their agency does not pay by voucher\r\n const paysByVoucher = usersAgencyPaysByVoucher(state)\r\n enableCart = !paysByVoucher\r\n }\r\n\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n order,\r\n permits,\r\n isMapShowing,\r\n showModal,\r\n lastDownloadDuration,\r\n isDownloading,\r\n enableCart,\r\n openModalKey : modalKey,\r\n lastDownload : lastDownloadFormatted,\r\n DownloadStatuses : { ...DownloadStatuses, },\r\n DownloadMapData : state.Map.downloadMapData,\r\n canBeAssigned : userCanBeAssignedPermits(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n ToggleMap : BurnPermitListActions.togglePermitMap,\r\n GetMyBurnPermits : BurnPermitListActions.getMyBurnPermits,\r\n DownloadPermits : BurnPermitListActions.downloadBurnPermits,\r\n CloseDownloadModal : BurnPermitListActions.closeDownloadModal,\r\n DoneDownloadingBurnPermits : BurnPermitListActions.doneDownloadingBurnPermits,\r\n SetDownloadStatus : BurnPermitListActions.setDownloadStatus,\r\n ResetDownloadStatus : BurnPermitListActions.resetDownloadStatus,\r\n OpenModal : UiActions.openModal,\r\n CloseModal : UiActions.closeModal,\r\n ToggleDownloadMapData : MapActions.toggleDownloadMapData,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitListContainer)","// Libraries\r\nimport React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport { connect, } from 'react-redux'\r\nimport { object, array, func, string, bool, } from 'prop-types'\r\nimport { Container, Card, CardBody, } from 'reactstrap'\r\n\r\n// Components\r\nimport DataTable from '../components/DataTable'\r\n\r\n// Actions\r\nimport BurnPermitOrderActions from '../redux/BurnPermitOrderRedux'\r\nimport AppActions from '../redux/AppRedux'\r\n\r\n// Selectors\r\nimport { ordersSelector, } from '../selectors/orderSelectors'\r\n\r\n// Models\r\nimport BurnPermitOrder from '../models/BurnPermitOrder'\r\n\r\n// Utilities\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n\r\nconst ORDER_DATATABLE_COLUMNS = BurnPermitOrder.getDataTablesColumns()\r\n\r\nexport class BurnPermitOrderListContainer extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n const permitIdColIdx = ORDER_DATATABLE_COLUMNS.findIndex(c => c.data === 'BurnPermitOrderXref')\r\n const orderIdColIdx = ORDER_DATATABLE_COLUMNS.findIndex(c => c.name === 'pay')\r\n\r\n const { RedirectTo, } = this.props\r\n const { navigate, } = this.props\r\n\r\n this.columnDefs = [\r\n {\r\n targets : permitIdColIdx,\r\n createdCell : (td, cellData) => {\r\n if (!cellData || !Array.isArray(cellData) || cellData.length === 0) {\r\n return td\r\n }\r\n // eslint-disable-next-line\r\n ReactDOM.render(\r\n cellData.map(({ BurnPermitId, }) => {\r\n // Sometimes the destructured property is an object, this will check for that and handle it\r\n if (typeof BurnPermitId !== 'number' && typeof BurnPermitId === 'object' && 'BurnPermitId' in BurnPermitId) {\r\n BurnPermitId = BurnPermitId.BurnPermitId\r\n }\r\n return \r\n {\r\n stopEvent(e)\r\n navigate({ pathname: '/permits/' + BurnPermitId, state: '/permits/orders', })\r\n }}>{BurnPermitId}\r\n
    \r\n
    \r\n })\r\n , td\r\n )\r\n },\r\n },\r\n {\r\n targets : orderIdColIdx,\r\n createdCell : (td, data) => {\r\n if (!data) {\r\n return td\r\n }\r\n \r\n // Always show a view detail control when the order is not paid\r\n // This will allow another route for users to access the unpaid order to either\r\n // remove applications from the order or delete the order altogether\r\n // eslint-disable-next-line\r\n ReactDOM.render(\r\n <>\r\n {\r\n stopEvent(e)\r\n RedirectTo(`/permits/orders/${data.BurnPermitOrderId}`)\r\n }}>View\r\n {\r\n // Only show the Pay control when the order is not paid\r\n data.AllowPayment &&\r\n {\r\n stopEvent(e)\r\n RedirectTo(`/permits/orders/${data.BurnPermitOrderId}/pay`)\r\n }}>Pay\r\n }\r\n \r\n , td\r\n )\r\n },\r\n },\r\n ]\r\n }\r\n\r\n static propTypes = {\r\n RedirectTo : func,\r\n GetOrders : func,\r\n SetPageTitle : func,\r\n orders : array,\r\n match : object,\r\n navigate : func,\r\n shouldRedirectTo : string,\r\n isDnr : bool,\r\n }\r\n\r\n componentDidMount () {\r\n const { SetPageTitle, GetOrders, } = this.props\r\n\r\n SetPageTitle('All Orders')\r\n GetOrders()\r\n }\r\n\r\n render () {\r\n return \r\n

    Burn Permit Orders

    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n return {\r\n orders: ordersSelector(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n RedirectTo : AppActions.redirectTo,\r\n SetPageTitle : AppActions.setPageTitle,\r\n GetOrders : BurnPermitOrderActions.getOrders,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnPermitOrderListContainer)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Navigate, } from 'react-router-dom'\nimport { isEmpty, } from 'lodash'\nimport { object, func, string, bool, } from 'prop-types'\nimport { Container, Row, Col, Card, CardHeader, CardBody, } from 'reactstrap'\n\n// Actions\nimport ApiActions from '../redux/ApiRedux'\nimport AppActions from '../redux/AppRedux'\nimport BurnPermitOrderActions from '../redux/BurnPermitOrderRedux'\n\n// Components\nimport withRouter from '../components/withRouter'\n\n// Selectors\nimport { orderByIdSelector, } from '../selectors/orderSelectors'\nimport { userCanRecordCashCheckPayment, } from '../selectors/burnPermitPermissionSelectors'\n\n// Utilities\nimport { queryParamsToObject, } from '../utilities'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_PAYMENT_ROOT_URL, } = process.env\n\n\nexport class BurnPermitOrderPayContainer extends React.Component {\n static propTypes = {\n // from withRouter HOC\n params : object,\n navigate : func,\n location : object,\n\n Failure : func,\n SetPageTitle : func,\n UpdateBurnPermitOrder : func,\n GetBurnPermitOrderDetail : func,\n order : object,\n isDnr : bool,\n isVerifiedAgent : bool,\n isStateGovCust : bool,\n isGovAgent : bool,\n paysByVoucher : bool,\n isPrivate : bool,\n isAgent : bool,\n redirectTo : string,\n canRecordCashCheck : bool,\n }\n\n state = {\n error : '',\n redirectTo : '',\n updatingOrder : false,\n redirecting : false,\n processing : false,\n }\n\n orderIdRegex = /\\/*\\/(\\d+)\\/*/g\n\n componentDidMount () {\n this.props.SetPageTitle('Pay Order')\n this.handleOrder()\n }\n\n componentDidUpdate (prevProps) {\n // If the order did not have a hash, but the app state has since been updated to\n // set the hash on the order, that is an indicator the API updated the order and\n // returned a successful response\n const { paramsObj, } = this.state\n if (!isEmpty(paramsObj) && this.props.order.PaymentHash === paramsObj.hash) {\n // Redirect the user to the payment detail\n this.props.navigate(`/permits/orders/${this.props.order.BurnPermitOrderId}`)\n }\n if (prevProps.redirectTo && !this.props.redirectTo) {\n this.navToPaymentSite()\n }\n if (!prevProps.order && !!this.props.order) {\n this.handleOrder()\n }\n }\n\n handleOrder = () => {\n const {\n order,\n canRecordCashCheck,\n GetBurnPermitOrderDetail,\n isVerifiedAgent,\n location,\n isStateGovCust,\n isPrivate,\n isAgent,\n isGovAgent,\n paysByVoucher,\n } = this.props\n \n const isRedirectBackFromPaymentSite = location.pathname.endsWith('?')\n const hasPaymentState = (location.state && location.state.onlinePayment === true)\n const isVerifiedGovCust = (isStateGovCust && isVerifiedAgent)\n const onlyPaysOnline = (isPrivate || (isAgent && isVerifiedAgent) || (isGovAgent && !paysByVoucher))\n const isPaymentMatch = location.pathname.endsWith('/pay')\n\n // If the user has reached this point, they somehow lost the order object out of their local state\n // but the URL should have an orderId in it, otherwise react router would not have matched to this\n // container to mount it\n if (!order) {\n const regMatch = location.pathname.match(this.orderIdRegex)\n if (regMatch.length) {\n const orderId = regMatch[0].replaceAll('/', '')\n GetBurnPermitOrderDetail(orderId)\n this.setState({ processing: true, })\n return\n }\n else {\n throw new Error('Could not locate or determine the Burn Permit Order or Order ID. Please contact support.')\n }\n }\n else if (order && !canRecordCashCheck) {\n const paramsObj = queryParamsToObject()\n // This should be a payment that's come back from payment processing if there are query arguments\n if (Object.keys(paramsObj).length > 0) {\n this.setState({ processing: false, })\n this.submitOrder(paramsObj)\n return\n }\n // DNR users always go to the order detail page\n // Redirects from the payment site (cancelled payments) go back to the detail page\n // Gov Customers go to the order detail page unless specified with state params\n else if ((this.props.isDnr) || (isVerifiedGovCust && !hasPaymentState) || isRedirectBackFromPaymentSite) {\n let route = `/permits/orders/${order.BurnPermitOrderId}`\n if (this.props.order.PaymentHash) {\n route += '?showNextSteps=true'\n }\n this.props.navigate(route)\n }\n // If the URL is specifically for Payment and this is either \n // a user type that only pays online or is a gov customer \n // with a state request set up, redirect to the portal\n else if ((isPaymentMatch) && ((isVerifiedGovCust && hasPaymentState) || onlyPaysOnline)) {\n this.navToPaymentSite()\n }\n }\n else {\n let route = `/permits/orders/${order.BurnPermitOrderId}`\n if (this.props.order.PaymentHash) {\n route += '?showNextSteps=true'\n }\n this.setState({ redirectTo: route, })\n }\n }\n\n submitOrder = paramsObj => {\n const { order, UpdateBurnPermitOrder, } = this.props\n const orderInfo = {\n BurnPermitOrderId : order.BurnPermitOrderId,\n BurnPermitIds : order.BurnPermitOrderXref.map(x => x.BurnPermitId),\n EPayResultMessage : paramsObj.m,\n EPayReturnCode : paramsObj.c,\n ConfirmationNumber : paramsObj.o,\n TotalAmountPaid : paramsObj.t,\n SettlementSubmissionDate : paramsObj.d,\n AuthorizationCode : paramsObj.z,\n CardType : paramsObj.ct,\n PaymentHash : paramsObj.hash,\n }\n // If the payment is not successful, show the message from PayPoint\n if (orderInfo.EPayReturnCode !== '1' && orderInfo.EPayReturnCode !== '2') {\n this.setState({ error: orderInfo.EPayResultMessage.replaceAll('\"', ''), })\n return\n }\n UpdateBurnPermitOrder(orderInfo)\n\n this.setState({ updatingOrder: true, paramsObj, })\n }\n\n navToPaymentSite = () => {\n this.setState({ redirecting: true, })\n const { order, } = this.props\n if (!order.BurnPermitOrderAmount) {\n this.props.Failure('No order amount was found. Please refresh then try again.')\n this.props.navigate(-1)\n return\n }\n const queryParams = {\n returnurl : window.location.href,\n custom : `$${order.BurnPermitOrderAmount},${order.BurnPermitOrderId}`,\n amount : order.BurnPermitOrderAmount,\n }\n\n let queryString = Object.keys(queryParams).map(key => `${key}=${encodeURIComponent(queryParams[key])}`).join('&')\n window.location.href = `${REACT_APP_PAYMENT_ROOT_URL}?${queryString}`\n }\n\n render () {\n const {\n redirectTo,\n redirecting,\n processing,\n paramsObj,\n error,\n } = this.state\n\n let header = '', body = ''\n if (redirecting) {\n header = 'Redirecting to Payment Site'\n body = 'Please wait while we redirect you to the Payment Site. This may take a few seconds.'\n }\n else if (!isEmpty(paramsObj) || processing) {\n header = 'Confirming Payment'\n body = 'Please wait while we confirm your payment. You will be redirected once complete.'\n }\n else if (error) {\n header = 'Error'\n body = error || 'An unknown error occurred. Please contact support.'\n }\n if (redirectTo) {\n return \n }\n \n return (\n \n \n \n \n {header}\n \n

    {body}

    \n
    \n
    \n \n
    \n
    \n )\n }\n}\n\nfunction mapStateToProps (state, props) {\n return {\n order : orderByIdSelector(state, props.params.BurnPermitOrderId),\n canRecordCashCheck : userCanRecordCashCheckPayment(state),\n redirectTo : state.app.redirectToRoute,\n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n Failure : ApiActions.failure,\n GetBurnPermitOrderDetail : BurnPermitOrderActions.getBurnPermitOrderDetail,\n UpdateBurnPermitOrder : BurnPermitOrderActions.updateBurnPermitOrder,\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(BurnPermitOrderPayContainer))","import React from 'react'\nimport { Link, } from 'react-router-dom'\nimport { PropTypes, object, bool, func, } from 'prop-types'\nimport { Alert, } from 'reactstrap'\n\nfunction PostBurnPrompt ({ postBurnPrompt, isPromptShowing, onToggleList, }) {\n if (!postBurnPrompt || !postBurnPrompt.length) {\n return null\n }\n const iconClass = isPromptShowing ? 'fa-chevron-circle-up' : 'fa-chevron-circle-down'\n const iconAlt = isPromptShowing ? 'Collapse Burn Request List' : 'Expand Burn Request List'\n const expandIcon = \n const postBurnText = You have {postBurnPrompt.length} Burn Request{postBurnPrompt.length > 1 ? 's' : null } in need of Post Burn reporting {expandIcon}\n return \n {postBurnText}\n { isPromptShowing &&\n
      \n { postBurnPrompt.map(p => {\n const { BurnRequestId, PostBurnPromptText, } = p\n return
    • \n #{BurnRequestId} - {PostBurnPromptText}\n
    • \n })}\n
    \n }\n
    \n}\n\nPostBurnPrompt.propTypes = {\n postBurnPrompt : PropTypes.arrayOf(object),\n isPromptShowing : bool,\n onToggleList : func,\n}\n\nPostBurnPrompt.defaultProps = {\n postBurnPrompt : [],\n isPromptShowing : true,\n onToggleList : () => console.error('No post-burn prompt toggle callback was provided.'),\n}\n\nexport default PostBurnPrompt","// Libraries\r\nimport React, { useMemo, } from 'react'\r\nimport { Modal, ModalBody, ModalHeader, ModalFooter, Button, Row, Table, Col, } from 'reactstrap'\r\nimport { func, array, bool, } from 'prop-types'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\n\r\n// Components\r\nimport CloseModalButton from './CloseModalButton'\r\n\r\n// Redux\r\nimport { BurnRequestDetailTypes, } from '../../redux/BurnRequestDetailRedux'\r\n\r\n// Utilities\r\nimport { dateFormatter, } from '../../utilities'\r\n\r\nconst BurnRequestNotices = ({\r\n requests = [],\r\n isOpen = false,\r\n closeModal, \r\n}) => {\r\n const reduxDispatch = useDispatch()\r\n const submitBurnRequest = React.useCallback((id) => {\r\n reduxDispatch({ type: BurnRequestDetailTypes.QUICK_SUBMIT_REQUEST, id, })\r\n }, [ reduxDispatch, ])\r\n\r\n const isSubmitting = requests.filter(f => f.Submitting === true).length > 0\r\n const requestTable = useMemo(() => {\r\n if (requests && requests.length > 0) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {requests.map((val) => {\r\n const requestLink = `/burn-requests/${val.BurnRequestId}`\r\n const { Submitting, Submitted, Failed, } = val\r\n let submitButton\r\n if (Submitting) {\r\n submitButton = ()\r\n } else if (Failed) {\r\n submitButton = ()\r\n } else if (Submitted) {\r\n submitButton = (\r\n )\r\n } else {\r\n submitButton = (\r\n \r\n )\r\n }\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n Failed &&\r\n \r\n \r\n \r\n }\r\n \r\n )\r\n })}\r\n \r\n
    Permit #Request DateIgnition Time
    {val.BurnRequestId}{val.MultiDayBurnFlag ? : null}{val.BurnPermitNumber}{val.BurnRequestDate ? dateFormatter(val.BurnRequestDate, 'MM-DD-YYYY') : null}\r\n {val.PlannedIgnitionDate ? dateFormatter(val.PlannedIgnitionDate, 'MM-DD-YYYY') : null}\r\n {' '}\r\n {val.PlannedIgnitionTime ? dateFormatter(val.PlannedIgnitionTime, 'HH:MM') : null}\r\n \r\n View\r\n \r\n {submitButton}\r\n
    \r\n Request submission failed. Please view and update the Request and retry the submission.\r\n
    \r\n )\r\n }\r\n return []\r\n }, [ requests, submitBurnRequest, isSubmitting, ])\r\n\r\n if (!requests || requests.length === 0) {\r\n return null\r\n }\r\n\r\n return \r\n Unsubmitted Burn Requests\r\n \r\n \r\n \r\n The following Burn Requests are scheduled to start within the next 24 hours and have not been submitted or reviewed by DNR staff.\r\n
    \r\n
    \r\n Use the controls below to View the Burn Request or Submit the Burn Request now.\r\n \r\n
    \r\n \r\n \r\n {requestTable}\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n}\r\n\r\nBurnRequestNotices.defaultProps = {\r\n closeModal: () => {},\r\n}\r\n\r\nBurnRequestNotices.propTypes = {\r\n requests : array,\r\n isOpen : bool,\r\n closeModal : func,\r\n}\r\n\r\nexport default React.memo(BurnRequestNotices)","// Libraries\r\nimport React, { useMemo, } from 'react'\r\nimport { render as ReactDOMRender, } from 'react-dom'\r\nimport { useNavigate, Link, } from 'react-router-dom'\r\nimport { Row, Col, Card, CardBody, CardHeader, Button, } from 'reactstrap'\r\nimport { bool, array, string, node, } from 'prop-types'\r\nimport { isEmpty, } from 'lodash'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\n\r\n// Components\r\nimport ESRIMap from '../ESRIMap'\r\nimport SimpleDataTable from '../SimpleTable'\r\nimport { DangerIcon, SuccessIcon, } from '../Icons'\r\n\r\n// Selectors\r\nimport { burnRequestMapDataSelector, } from '../../selectors/burnRequestSelectors'\r\n\r\n// Models\r\nimport BurnRequestSearch from '../../models/BurnRequestSearch'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n// Hooks\r\nimport { useGetSearchExportFilename, } from '../../hooks'\r\n\r\n// Map Config\r\nimport { burnRequestAction, permitAction, } from '../../config/map/actions'\r\n\r\nimport BurnRequestListActions from '../../redux/BurnRequestListRedux'\r\n\r\nconst defaultLayerObj = {}\r\nconst mapColStyle = { height: '530px', }\r\n\r\nexport const BurnRequestTable = ({\r\n requests,\r\n aboveTableContent,\r\n belowTableContent,\r\n showMap,\r\n isAuthenticated,\r\n showCardHeader = false,\r\n showLandownerAgent = false,\r\n showPermitAction = false,\r\n layerConfig,\r\n}) => {\r\n const { columns, reqIdColIdx, permNumColIdx, postBurnColIdx, } = React.useMemo(() => {\r\n const cols = [ ...BurnRequestSearch.getDataTablesColumns({ showLandownerAgent: isAuthenticated, }), ]\r\n return {\r\n columns : cols,\r\n reqIdColIdx : cols.findIndex(c => c.title === 'Burn Request ID'),\r\n permNumColIdx : cols.findIndex(c => c.title === 'Permit Number'),\r\n postBurnColIdx : cols.findIndex(c => c.title === 'Post-Burn'),\r\n }\r\n }, [ isAuthenticated, ])\r\n const reduxDispatch = useDispatch()\r\n\r\n const mapClass = useMemo(() => {\r\n let classString = 'map-container rounded'\r\n if (showMap) {\r\n classString += ' my-1'\r\n }\r\n else {\r\n classString += ' d-none'\r\n }\r\n return classString\r\n }, [ showMap, ])\r\n const navigate = useNavigate()\r\n\r\n // Burn Request map layer selector\r\n const BurnRequestsMapLayer = useSelector((state) => {\r\n if (showMap) {\r\n const layerData = burnRequestMapDataSelector(state, showLandownerAgent)\r\n if (layerData) {\r\n const bindProps = { navigate, }\r\n if (showPermitAction) {\r\n layerData.actions = [ burnRequestAction.bind(bindProps)(), permitAction.bind(bindProps)('BurnRequests'), ]\r\n } else {\r\n layerData.actions = [ burnRequestAction.bind(bindProps)(), ]\r\n }\r\n }\r\n return layerData\r\n }\r\n return defaultLayerObj\r\n })\r\n\r\n const buildCellLink = React.useCallback((cell, href, text) => {\r\n return ReactDOMRender(\r\n {\r\n stopEvent(e)\r\n const pathname = e.target.href.replace(window.location.origin, '')\r\n navigate(pathname)\r\n }}>{text}\r\n , cell\r\n )\r\n }, [ navigate, ])\r\n\r\n const getFileName = useGetSearchExportFilename('BurnRequestSearch')\r\n\r\n const dtConfig = React.useMemo(() => {\r\n return {\r\n columns,\r\n columnDefs: [\r\n {\r\n targets : reqIdColIdx,\r\n createdCell : (td, cellData) => {\r\n const href = `/burn-requests/${cellData}`\r\n return buildCellLink(td, href, cellData)\r\n },\r\n },\r\n {\r\n targets : [ permNumColIdx, ],\r\n createdCell : (td, cellData, rowData) => {\r\n const href = `/permits/${rowData.BurnPermitId}`\r\n return buildCellLink(td, href, cellData)\r\n },\r\n },\r\n {\r\n targets : [ postBurnColIdx, ],\r\n createdCell : (td, hasPostBurn, rowData) => {\r\n const href = `/permits/${rowData.BurnPermitId}/postburn?burnRequestId=${rowData.BurnRequestId}`\r\n let cellData = <>Enter \r\n if (hasPostBurn) {\r\n cellData = <>View \r\n }\r\n return buildCellLink(td, href, cellData)\r\n },\r\n },\r\n ],\r\n data : requests,\r\n scrollY : '65vh',\r\n scrollCollapse : true,\r\n order : [],\r\n rowCallback : (row) => row.classList.add('no-click'),\r\n buttons : [\r\n 'colvis',\r\n 'excel',\r\n 'print',\r\n {\r\n extend : 'csvHtml5',\r\n filename : getFileName,\r\n },\r\n 'pdf',\r\n ],\r\n }\r\n }, [ buildCellLink, columns, permNumColIdx, postBurnColIdx, reqIdColIdx, requests, getFileName, ])\r\n\r\n const ToggleMap = React.useCallback(() => reduxDispatch(BurnRequestListActions.toggleMap()), [ reduxDispatch, ])\r\n\r\n const mapBtnText = useMemo(() => {\r\n let btnText = 'Show Map'\r\n if (showMap) {\r\n btnText = 'Hide Map'\r\n }\r\n return btnText\r\n }, [ showMap, ])\r\n\r\n const mapData = useMemo(() => {\r\n let data = []\r\n if (!isEmpty(BurnRequestsMapLayer)) {\r\n data = [ BurnRequestsMapLayer, ]\r\n }\r\n return data\r\n }, [ BurnRequestsMapLayer, ])\r\n\r\n return <>\r\n \r\n { showCardHeader && \r\n
    \r\n New Request\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n }\r\n \r\n {aboveTableContent}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {belowTableContent}\r\n \r\n
    \r\n \r\n}\r\n\r\nBurnRequestTable.propTypes = {\r\n showLandownerAgent : bool,\r\n showMap : bool,\r\n showCardHeader : bool,\r\n requests : array,\r\n aboveTableContent : node,\r\n belowTableContent : node,\r\n isAuthenticated : bool,\r\n showPermitAction : bool,\r\n layerConfig : string,\r\n}\r\n\r\nexport default BurnRequestTable","// Libraries\r\nimport React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { connect, } from 'react-redux'\r\nimport { Container, Row, Col, CardText, Button, ListGroup, ListGroupItem, Alert, FormGroup, Label, ButtonGroup, } from 'reactstrap'\r\nimport { func, bool, array, shape, string, number, } from 'prop-types'\r\n\r\n// Reducers\r\nimport AppActions from '../redux/AppRedux'\r\nimport BurnRequestListActions from '../redux/BurnRequestListRedux'\r\nimport MapActions from '../redux/MapRedux'\r\nimport PostBurnActions from '../redux/PostBurnRedux'\r\nimport UiActions from '../redux/UiRedux'\r\nimport PersonActions from '../redux/PersonRedux'\r\n\r\n// Components\r\nimport ConfirmationModal from '../components/ConfirmationModal'\r\nimport { SuccessIcon, } from '../components/Icons'\r\nimport PostBurnPrompt from '../components/PostBurnPrompt'\r\nimport LoadingBar from '../components/LoadingBar'\r\nimport { ButtonGroupButton, } from '../components/FormControls'\r\nimport withRouter from '../components/withRouter'\r\nimport BurnRequestNotices from '../components/Modals/BurnRequestNotices'\r\nimport BurnRequestTable from '../components/Search/BurnRequestTable'\r\n\r\n// Selectors\r\nimport { postBurnPromptSelector, } from '../selectors/postBurnSelectors'\r\nimport { requestDownloadedCount, burnRequestsSelector, } from '../selectors/burnRequestSelectors'\r\nimport { userPersonIdSelector, } from '../selectors/userSelectors'\r\nimport { userSeesPostBurnPrompt, } from '../selectors/burnRequestPermissionSelectors'\r\nimport { getUnsubmittedRequests, } from '../selectors/personSelectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n// Map Config\r\n\r\nconst noopAction = () => {\r\n console.error('An action was not executed')\r\n}\r\n\r\nconst DOWNLOAD_BURN_REQUESTS = 'DOWNLOAD_BURN_REQUESTS'\r\n\r\n\r\nexport class BurnRequestListContainer extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n }\r\n\r\n static propTypes = {\r\n // from withRouter HOC\r\n navigate: func,\r\n\r\n // actions\r\n ClearPostBurnStatus : func,\r\n GetPostBurnStatus : func,\r\n SetPageTitle : func,\r\n ToggleMap : func,\r\n TogglePostBurn : func,\r\n OpenModal : func,\r\n CloseDownloadModal : func,\r\n DownloadRequests : func,\r\n SetDownloadStatus : func,\r\n GetMyBurnRequests : func,\r\n ToggleDownloadMapData : func,\r\n // selectors\r\n isMapShowing : bool,\r\n isPromptShowing : bool,\r\n postBurnPrompt : array,\r\n // from parent\r\n checkPostBurn : bool,\r\n online : bool,\r\n DownloadStatuses : shape({\r\n BurnPermitsDownloaded : bool,\r\n BurnRequestsDownloaded : bool,\r\n PostBurnsDownloaded : bool,\r\n }),\r\n DownloadMapData : bool,\r\n openModalKey : string,\r\n isDownloading : bool,\r\n lastDownload : string,\r\n lastDownloadDuration : string,\r\n downloadRequestCount : number,\r\n requests : array,\r\n personId : number,\r\n burnRequestNotices : array,\r\n GetRequestNotices : func,\r\n isAuthenticated : bool,\r\n }\r\n\r\n static defaultProps = {\r\n ClearPostBurnStatus : noopAction,\r\n GetPostBurnStatus : noopAction,\r\n SetPageTitle : noopAction,\r\n ToggleMap : noopAction,\r\n TogglePostBurn : noopAction,\r\n isMapShowing : false,\r\n isPromptShowing : true,\r\n postBurnPrompt : [],\r\n checkPostBurn : false,\r\n }\r\n\r\n state = {\r\n downloadMapData : false,\r\n requestModalDismissed : false,\r\n }\r\n\r\n componentDidMount () {\r\n const { online, checkPostBurn, SetPageTitle, ClearPostBurnStatus, GetPostBurnStatus, GetMyBurnRequests, } = this.props\r\n SetPageTitle('My Burn Requests')\r\n GetMyBurnRequests()\r\n if (checkPostBurn) {\r\n ClearPostBurnStatus()\r\n if (online) {\r\n GetPostBurnStatus()\r\n }\r\n }\r\n this.props.GetRequestNotices(this.props.personId)\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { openModalKey, DownloadStatuses, } = this.props\r\n \r\n if (openModalKey === DOWNLOAD_BURN_REQUESTS) {\r\n if (prevProps.DownloadMapData && !this.props.DownloadMapData && !DownloadStatuses.MapDataDownloaded) {\r\n this.props.SetDownloadStatus('MapData', true)\r\n }\r\n }\r\n else if (prevProps.openModalKey === DOWNLOAD_BURN_REQUESTS && !openModalKey) {\r\n this.setState({ downloadMapData: false, })\r\n }\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.ClearPostBurnStatus()\r\n }\r\n\r\n togglePostBurn = () => {\r\n this.props.TogglePostBurn(!this.props.isPromptShowing)\r\n }\r\n\r\n downloadRequests = evt => {\r\n stopEvent(evt)\r\n\r\n const { OpenModal, } = this.props\r\n\r\n OpenModal(DOWNLOAD_BURN_REQUESTS)\r\n }\r\n\r\n confirmDownloadRequests = () => {\r\n if (this.state.downloadMapData) {\r\n if (!this.props.isMapShowing) {\r\n this.props.ToggleMap()\r\n }\r\n this.props.ToggleDownloadMapData()\r\n }\r\n this.props.DownloadRequests()\r\n }\r\n\r\n closeDownloadModal = () => {\r\n const { openModalKey, CloseDownloadModal, } = this.props\r\n if (openModalKey === DOWNLOAD_BURN_REQUESTS) {\r\n CloseDownloadModal()\r\n }\r\n }\r\n\r\n toggleMapDownload = evt => {\r\n const { classList, } = evt.target\r\n if (classList.contains('active')) {\r\n return\r\n }\r\n this.setState({ downloadMapData: !this.state.downloadMapData, })\r\n }\r\n\r\n closeBurnReqsNotices = () => this.setState({ requestModalDismissed: true, })\r\n\r\n render () {\r\n const { postBurnPrompt, DownloadStatuses, isAuthenticated, requests, isMapShowing, } = this.props\r\n const { requestModalDismissed, } = this.state \r\n const showPostBurn = (postBurnPrompt && postBurnPrompt.length > 0)\r\n const aboveTableContent = <>\r\n \r\n {\r\n this.props.checkPostBurn\r\n ? 'View your Burn Requests and Post-Burn data here. Click New Request to start a new Burn Request.'\r\n : 'View the Burn Requests of the Burn Permits you\\'re assigned to here.'\r\n }\r\n \r\n {\r\n this.props.online &&\r\n \r\n Click to allow access to your Burn Requests while offline.\r\n \r\n }\r\n {\r\n showPostBurn &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n const belowTableContent = \r\n \r\n New Request\r\n \r\n \r\n return (\r\n \r\n

    My Burn Requests

    \r\n 0}\r\n closeModal={this.closeBurnReqsNotices}\r\n />\r\n \r\n \r\n {\r\n this.props.lastDownload\r\n ? <>\r\n

    You last downloaded { this.props.downloadRequestCount || requests.length } Burn Requests on
    { this.props.lastDownload } which took { this.props.lastDownloadDuration }.

    \r\n This can take a couple minutes depending on your internet connection.\r\n \r\n :

    Click Download below to download the your Burn Requests, Burn Permits, and Post Burn data for offline use.

    \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n this.state.downloadMapData && <>\r\n

    If you want access to Imagery offline, make sure to set it as your active basemap before starting the download

    \r\n

    Not all basemaps are available offline or at all zoom levels.

    \r\n Warning! Downloading map data is best performed on a fast, stable Wi-Fi connection.\r\n \r\n }\r\n
    \r\n { this.props.isDownloading && <>\r\n

    Please wait while we download your { this.props.downloadRequestCount || requests.length } Burn Requests.

    \r\n \r\n {\r\n this.state.downloadMapData &&\r\n \r\n Map Data { this.props.DownloadStatuses.MapDataDownloaded && }\r\n \r\n }\r\n \r\n Burn Permits { DownloadStatuses.BurnPermitsDownloaded && }\r\n \r\n \r\n Burn Requests { DownloadStatuses.BurnRequestsDownloaded && }\r\n \r\n \r\n Post Burns { DownloadStatuses.PostBurnsDownloaded && }\r\n \r\n \r\n \r\n }\r\n }\r\n />\r\n
    \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n const personId = userPersonIdSelector(state)\r\n let postBurnPrompt = []\r\n const checkPostBurn = userSeesPostBurnPrompt(state)\r\n if (checkPostBurn) {\r\n postBurnPrompt = postBurnPromptSelector(state)\r\n }\r\n const {\r\n isDownloading,\r\n isMapShowing,\r\n isPostBurnShowing,\r\n lastDownloadFormatted,\r\n lastDownloadDuration,\r\n DownloadStatuses,\r\n } = state.BurnRequestList\r\n\r\n let downloadRequestCount = 0\r\n if (state.offline.online) {\r\n downloadRequestCount = requestDownloadedCount(state)\r\n }\r\n\r\n const { showModal, modalKey, } = state.ui.Modal\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n postBurnPrompt,\r\n showModal,\r\n requests : burnRequestsSelector(state),\r\n openModalKey : modalKey,\r\n isPromptShowing : isPostBurnShowing,\r\n isMapShowing : isMapShowing,\r\n lastDownload : lastDownloadFormatted,\r\n lastDownloadDuration,\r\n isDownloading,\r\n DownloadStatuses,\r\n downloadRequestCount,\r\n DownloadMapData : state.Map.downloadMapData,\r\n checkPostBurn,\r\n burnRequestNotices : getUnsubmittedRequests(state),\r\n personId,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n ToggleMap : BurnRequestListActions.toggleMap,\r\n GetPostBurnStatus : PostBurnActions.getPbPromptsForUser,\r\n ClearPostBurnStatus : PostBurnActions.clearPostBurnPrompt,\r\n TogglePostBurn : BurnRequestListActions.togglePbs,\r\n DownloadRequests : BurnRequestListActions.downloadRequests,\r\n GetMyBurnRequests : BurnRequestListActions.getMyBurnRequests,\r\n SetDownloadStatus : BurnRequestListActions.setRequestsDownloadStatus,\r\n CloseDownloadModal : BurnRequestListActions.closeRequestsDownloadModal,\r\n ToggleDownloadMapData : MapActions.toggleDownloadMapData,\r\n OpenModal : UiActions.openModal,\r\n GetRequestNotices : PersonActions.getUnsubmittedRequests,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(BurnRequestListContainer))","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { PropTypes, string, number, func, object, array, bool, } from 'prop-types'\nimport {\n Col,\n Card,\n CardHeader,\n CardBody,\n FormGroup,\n FormFeedback,\n Input,\n Label,\n Modal,\n ModalBody,\n ModalHeader,\n ModalFooter,\n Button,\n Row,\n Alert,\n} from 'reactstrap'\nimport { Formik, Form, Field, ErrorMessage, } from 'formik'\nimport * as Yup from 'yup'\nimport { isEqual, } from 'lodash'\n\n// Redux\nimport BurnRequestDetailActions from '../redux/BurnRequestDetailRedux'\nimport PersonActions from '../redux/PersonRedux'\nimport UiActions from '../redux/UiRedux'\n\n// Components\nimport DataTable from './DataTable'\nimport ConfirmationModal from './ConfirmationModal'\nimport { AssignedStaff, Select, } from './FormControls'\n\n// Selectors\nimport {\n burnRequestStatuses,\n burnRequestStatus,\n burnRequestStatusHistory,\n burnRequestIsApproved,\n burnRequestInPersonsRegion,\n burnRequestRegion,\n} from '../selectors/burnRequestSelectors'\nimport { userNameSelector, userPersonIdSelector, } from '../selectors/userSelectors'\nimport {\n userSeesInternalReqStatus,\n userCanAssignBurnRequest,\n userCanChangeRequestStatus,\n userMustEnterStatusComment,\n userIsDivisionApprover,\n} from '../selectors/burnRequestPermissionSelectors'\n\n// Utilities\nimport { renderDateTime, renderCheckIcon, } from '../utilities/columnHelpers'\nimport stopEvent from '../utilities/stopEvent'\nimport { dateFormatter, } from '../utilities'\n\nconst SUBMIT_REQUEST_REVIEW = 'SUBMIT_REQUEST_REVIEW'\nconst OVERRIDE_BURN_REQUEST_DECISION = 'OVERRIDE_BURN_REQUEST_DECISION'\n\nclass BurnRequestReview extends React.Component {\n static propTypes = {\n burnRequestId : number.isRequired,\n GetAssignableUsers : func,\n GetBurnRequestStatusHistory : func.isRequired,\n BurnRequestStatus : object,\n BurnRequestStatuses : array,\n BurnRequestStatusId : PropTypes.oneOfType([ number, string, ]),\n BurnRequestStatusHistory : array,\n SubmitRequestStatus : func,\n DeleteRequestStatus : func,\n ShowOverride : bool,\n MakesSMDecisions : bool,\n canChangeStatus : bool,\n canAssignRequest : bool,\n statusCommentRequired : bool,\n showInternalStatus : bool,\n isOpen : bool,\n userName : string,\n requestStatus : object,\n hideForm : bool,\n online : bool,\n OpenModal : func,\n OverrideDecision : func,\n BurnRequestRegionId : number,\n isDivisionApprover : bool,\n }\n\n state = {\n BurnRequestId : this.props.burnRequestId,\n BurnRequestStatusId : this.props.BurnRequestStatusId || -1,\n InternalOnly : false,\n Comment : '',\n redraw : false,\n modalState : {\n isModalVisible : false,\n modalType : '',\n modalData : null,\n },\n }\n\n get columns () {\n const defs = [ \n {\n title : 'Status',\n data : 'Status',\n },\n {\n data : 'StatusDate',\n title : 'Status Date',\n render : renderDateTime,\n },\n {\n title : 'Comment',\n data : 'Comment',\n defaultContent : '',\n },\n {\n title : 'Assigned To',\n data : 'AssignedTo',\n defaultContent : '',\n }, \n {\n title : 'Submitted By',\n data : 'CreateBy',\n defaultContent : '',\n }, \n ]\n if (this.props.showInternalStatus) {\n defs.push({\n data : 'InternalOnly',\n title : 'Internal',\n width : '10px',\n defaultContent : '',\n render : renderCheckIcon,\n })\n }\n return defs\n }\n\n getValidationSchema = () => {\n if (this.props.statusCommentRequired) {\n return Yup.object().shape({ Comment: Yup.string().ensure().required('You must enter a comment.'), })\n }\n return Yup.object().shape({\n BurnRequestStatusId : Yup.number().min(1, 'You must choose an status.'),\n AssignedTo : Yup.string().ensure().required('You must assign someone.'),\n })\n }\n\n getModalHeader = () => {\n const { modalState, } = this.state\n if (!modalState.isModalVisible) {\n return null\n }\n if (modalState.modalType === SUBMIT_REQUEST_REVIEW) {\n return 'Submit Request Review'\n }\n }\n\n getModalBody = () => {\n const { modalState, } = this.state\n if (!modalState.isModalVisible) {\n return null\n }\n if ((modalState.modalType === SUBMIT_REQUEST_REVIEW) && modalState.modalData) {\n const { modalData, } = modalState\n let msg, defaultComment, group = this.props.isDivisionApprover ? '[Division] ' : '[Region] '\n if (modalData.StatusName === 'Approved') {\n if (this.props.isDivisionApprover) {\n if (Number.isInteger(this.props.BurnRequestRegionId)) {\n msg = <>Region Users that make smoke management decisions will be alerted of the approval.\n }\n else {\n msg = <>No region can be found for this Permit. You must alert the Region yourself this have been Approved and they need to submit their review. Or close this modal, then make sure you assign one of the Region users so they get alerted.\n }\n }\n else if (this.props.MakesSMDecisions) {\n msg = <>The Burner will be immediately alerted of the approval.\n }\n defaultComment = `${group} Your Burn Request has been ${modalData.StatusName}`\n }\n else if (modalData.StatusName === 'Denied') {\n defaultComment = `${group} Your Burn Request has been ${modalData.StatusName}`\n msg = <>The Burner will be immediately alerted of the denial.\n }\n else {\n defaultComment = `${group} You Burn Request status is now ${modalData.StatusName}`\n }\n return <>\n

    Are you sure you want this Burn Request status to be set to {modalData.StatusName}?

    \n { !modalState.modalData.Comment && \n

    You did not include a Comment detailing your decision.

    \n

    Either click No then enter a comment, or click Yes and the following comment will be entered for you:

    \n

    {defaultComment}

    \n
    \n }\n { msg &&

    {msg}

    }\n \n }\n }\n\n getModalFooter = () => {\n const { modalState, } = this.state\n if (!modalState.isModalVisible) {\n return null\n }\n if (modalState.modalType === SUBMIT_REQUEST_REVIEW && modalState.modalData) {\n return <>\n \n \n \n }\n }\n\n componentDidMount () {\n if (this.props.online) {\n const { canAssignRequest, burnRequestId, GetBurnRequestStatusHistory, GetAssignableUsers, } = this.props\n \n if (canAssignRequest) {\n GetAssignableUsers()\n }\n GetBurnRequestStatusHistory(burnRequestId)\n }\n this.setState({ showModal: false, })\n }\n\n componentDidUpdate (prevProps) {\n if (!isEqual(prevProps.requestStatus, this.props.requestStatus) && this.state.modalState.isModalVisible) {\n this.setState({ modalState: { isModalVisible: false, }, })\n }\n }\n\n submit = (values) => {\n values.AssignedTo = null // Null this out as the API tries to serialize it to a class which will throw an error;\n if (this.props.canChangeStatus !== true) {\n values.BurnRequestStatusId = -1\n }\n\n this.props.SubmitRequestStatus(values)\n this.formik.resetForm()\n }\n\n submitReview = evt => {\n stopEvent(evt)\n const { BurnRequestStatusId, Comment, } = this.formik.values\n let StatusName = ''\n const status = this.props.BurnRequestStatuses.find(s => s.Value === parseInt(BurnRequestStatusId))\n if (status) {\n StatusName = status.Text\n }\n this.setState({\n modalState: {\n modalType : SUBMIT_REQUEST_REVIEW,\n isModalVisible : true,\n modalData : { StatusName, Comment, },\n },\n })\n }\n\n showOverrideModal = evt => {\n stopEvent(evt)\n this.setState({ showSpinner: false, })\n this.props.OpenModal(OVERRIDE_BURN_REQUEST_DECISION)\n }\n\n setFormikNode = node => this.formik = node\n\n render () {\n\n const {\n requestStatus,\n BurnRequestStatuses,\n hideForm,\n online,\n ShowOverride,\n canChangeStatus,\n } = this.props\n\n if (!requestStatus) {\n return null\n }\n\n const requestStatusIsReadOnly = !canChangeStatus\n\n return <>\n {\n !hideForm &&\n \n \n Burn Request Status\n \n \n
    \n { !online &&

    Recording a Status requires an internet connection. The form will enable when a connection is restored.

    }\n {\n canChangeStatus &&\n \n \n \n \n {({ field, form, }) => (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n {({ field, }) => (\n <>\n \n { \n !field.value && \n Warning: This comment will be visible to the burner unless this box is checked.\n }\n \n )}\n \n \n \n \n }\n \n \n \n \n \n \n \n \n \n
    \n \n
    \n
    \n \n }\n \n \n \n
    {/* For some reason the app crashes if this conditional render is not wrapped in its own tag */}\n {\n ShowOverride && <>\n \n \n

    Are you sure you want to override this {requestStatus.Status === 'Approved' ? 'Approval' : 'Denial'}?

    \n {\n requestStatus.Status === 'Denied' && \n \n

    This will Approve this Burn Request at the Region level also.

    \n
    \n }\n \n this.setState({ overrideComment: evt.target.value, })}\n />\n {this.state.overrideCommentError}\n \n

    You should contact the Burner as soon as possible if they have not been contacted already.

    \n
    \n }\n disableButtons={this.state.showSpinner}\n submitActionLabel={requestStatus.Status === 'Approved' ? 'Deny' : 'Approve'}\n submitAction={() => {\n if (this.state.overrideComment) {\n this.setState({ showSpinner: true, })\n this.props.OverrideDecision(this.props.burnRequestId, this.state.overrideComment)\n }\n else {\n this.setState({ overrideCommentError: 'Please enter a reason for the override', })\n }\n }}\n showSpinner={this.state.showSpinner}\n />\n \n }\n
    \n \n
    \n
    \n \n {\n canChangeStatus && \n \n {this.getModalHeader()}\n \n \n {this.getModalBody()}\n \n \n {this.getModalFooter()}\n \n \n }\n \n }\n}\n\nfunction mapStateToProps (state, props) {\n const { burnRequestId, } = props\n \n const requestStatus = burnRequestStatus(state, burnRequestId)\n let BurnRequestStatuses = burnRequestStatuses(state, s => s.BurnRequestStatusName !== 'Submitted' && s.BurnRequestStatusName !== 'Cancelled')\n\n // Double check it has not been approved by a Region user\n const isRegionApproved = burnRequestIsApproved(state, burnRequestId)\n const isDivisionApprover = userIsDivisionApprover(state)\n let hideForm = props.hideForm || isRegionApproved || !props.MakesSMDecisions\n // If the current user is Smoke Mgmt\n if (isDivisionApprover) {\n // Hide the form if the request is approved or denied\n hideForm = (props.IsApproved || props.IsDenied)\n }\n // If the current user can make Smoke Mgmt Decisions\n else if (props.MakesSMDecisions) {\n hideForm = true\n if (props.IsApproved && !props.IsDenied) {\n // Show the form if it has not been approved by Region\n hideForm = isRegionApproved\n BurnRequestStatuses = BurnRequestStatuses.filter(s => s.Text === 'Approved' || s.Text === 'Denied')\n }\n }\n\n const now = new Date()\n now.setUTCHours(0, 0, 0, 0)\n const ignDate = new Date(props.IgnitionDate)\n ignDate.setUTCHours(0, 0, 0, 0)\n const _ignDate = dateFormatter(ignDate)\n const ignitionDateIsToday = _ignDate.isSame(now.toJSON()) || _ignDate.isAfter(now.toJSON())\n\n const ShowOverride = requestStatus && props.CanOverrideDecisions && ignitionDateIsToday && (props.IsApproved || props.IsDenied)\n\n const userPersonId = userPersonIdSelector(state)\n let burnReqInPersonRegion = false\n if (isDivisionApprover && !props.IsApproved) {\n burnReqInPersonRegion = true\n }\n else {\n burnReqInPersonRegion = burnRequestInPersonsRegion(state, burnRequestId, userPersonId)\n }\n if (!burnReqInPersonRegion) {\n hideForm = true\n }\n\n const BurnRequestRegionId = burnRequestRegion(state, burnRequestId)\n\n const { online, } = state.offline\n return {\n online,\n hideForm,\n requestStatus,\n BurnRequestStatuses,\n burnReqInPersonRegion,\n ShowOverride,\n BurnRequestRegionId,\n isDivisionApprover,\n BurnRequestStatusHistory : burnRequestStatusHistory(state, burnRequestId),\n userName : userNameSelector(state),\n showInternalStatus : userSeesInternalReqStatus(state),\n canAssignRequest : userCanAssignBurnRequest(state),\n canChangeStatus : userCanChangeRequestStatus(state),\n statusCommentRequired : userMustEnterStatusComment(state),\n }\n}\n\nconst mapDispatchToProps = {\n OpenModal : UiActions.openModal,\n GetAssignableUsers : PersonActions.getAssignableUsers,\n GetBurnRequestStatusHistory : BurnRequestDetailActions.getBurnRequestStatusHistory,\n SubmitRequestStatus : BurnRequestDetailActions.submitRequestStatus,\n DeleteRequestStatus : BurnRequestDetailActions.deleteRequestStatus,\n OverrideDecision : BurnRequestDetailActions.overrideDecision,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BurnRequestReview)\n","// Libraries\r\nimport React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { connect, } from 'react-redux'\r\nimport { Row, Col, FormGroup, Label, Input, Card, CardBody, CardHeader, Collapse, } from 'reactstrap'\r\nimport { array, object, number, bool, func, } from 'prop-types'\r\n\r\n// Components\r\nimport CheckBoxes from '../components/FormControls/CheckBoxes'\r\n\r\n// Utilities\r\nimport { dateFormatter, } from '../utilities'\r\n\r\n// Selectors\r\nimport {\r\n burnedAcresByPermitSelector,\r\n burnedTonsByPermitSelector,\r\n daysOfWeekCheckboxSelector,\r\n} from '../selectors/selectors'\r\nimport { permitDaysSelector, } from '../selectors/burnPermitSelectors'\r\nimport { getPermitSummaryForRequest, } from '../selectors/burnRequestSelectors'\r\nimport AuditData from './AuditData'\r\n\r\n\r\nconst BurnPermitSummary = ({\r\n BurnPermitId,\r\n burnPermit,\r\n burnedTons,\r\n burnedAcres,\r\n daysOfWeek,\r\n permitDays,\r\n showConditionLink,\r\n}) => {\r\n \r\n if (!burnPermit) {\r\n return null\r\n }\r\n\r\n const conditionsUrl = `/permits/${BurnPermitId}/conditions`\r\n const auditData = burnPermit ? : null\r\n \r\n return <>\r\n { showConditionLink &&\r\n \r\n \r\n Please view the conditions of your permit before submitting your request.\r\n \r\n \r\n }\r\n \r\n \r\n {\r\n burnPermit.MailPermitToAgentFlag && burnPermit.Agent\r\n ? \r\n \r\n \r\n \r\n : burnPermit.MailPermitToLandownerFlag && burnPermit.Burner\r\n ? \r\n \r\n \r\n \r\n : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n burnPermit.ForestHealthExempt && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n burnPermit.ForestHealthExempt.ForestHealthExemptionApprovalFlag &&\r\n \r\n Approved By: {burnPermit.ForestHealthExempt.ForestHealthExemptionApprovalBy}
    \r\n Approved On: {dateFormatter(burnPermit.ForestHealthExempt.ForestHealthExemptionApprovalDate, 'MM-DD-YYYY hh:mm:ss a')}\r\n
    \r\n }\r\n \r\n
    \r\n }\r\n {auditData}\r\n \r\n}\r\n\r\nBurnPermitSummary.propTypes = {\r\n BurnPermitId : number,\r\n burnPermit : object,\r\n burnedTons : number,\r\n burnedAcres : number,\r\n daysOfWeek : array,\r\n permitDays : array,\r\n showConditionLink : bool,\r\n}\r\n\r\nBurnPermitSummary.defaultProps = {\r\n burnPermit : null,\r\n burnedTons : 0,\r\n burnedAcres : 0,\r\n daysOfWeek : [],\r\n permitDays : [],\r\n showConditionLink : true,\r\n}\r\n\r\nconst BurnPermitSummaryCard = ({\r\n BurnPermitId,\r\n burnPermit,\r\n burnedTons,\r\n burnedAcres,\r\n daysOfWeek,\r\n permitDays,\r\n isOpen,\r\n onClick,\r\n showConditionLink,\r\n showPermitLink,\r\n}) => {\r\n\r\n const permitUrl = `/permits/${BurnPermitId}`\r\n const headerText = `Burn Permit ${burnPermit ? burnPermit.BurnPermitNumber : BurnPermitId}`\r\n let collapse\r\n if (typeof onClick === 'function') {\r\n collapse =
    \r\n }\r\n return \r\n \r\n

    \r\n {\r\n showPermitLink\r\n ? {headerText}\r\n : headerText\r\n }\r\n

    \r\n ({burnPermit ? burnPermit.Status : ''})\r\n { collapse }\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n}\r\n\r\nBurnPermitSummaryCard.propTypes = {\r\n ...BurnPermitSummary.propTypes,\r\n isOpen : bool,\r\n onClick : func,\r\n}\r\n\r\nBurnPermitSummaryCard.defaultProps = {\r\n ...BurnPermitSummary.defaultProps,\r\n isOpen: true,\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { BurnPermitId, } = props\r\n const burnPermit = getPermitSummaryForRequest(state, BurnPermitId)\r\n \r\n return {\r\n burnPermit,\r\n daysOfWeek : daysOfWeekCheckboxSelector(state),\r\n burnedAcres : burnedAcresByPermitSelector(state, BurnPermitId),\r\n burnedTons : burnedTonsByPermitSelector(state, BurnPermitId),\r\n permitDays : permitDaysSelector(state, BurnPermitId),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(BurnPermitSummaryCard)","// Libraries\nimport React, { useState, } from 'react'\nimport { Row, Col, Button, Form, FormGroup,FormFeedback, Label, Input, } from 'reactstrap'\nimport { func, string, } from 'prop-types'\n\n// Utilities\nimport stopEvent from '../utilities/stopEvent'\n\nconst noFuncProvided = () => {\n console.error('Permit number search was not set up correctly.')\n}\n\nconst PermitNumberSearch = ({\n doSearch,\n onChange,\n error,\n searchHeaderText,\n}) => {\n const [ permitNumber, setPermitNumber, ] = useState('')\n // when user types in the box\n // update state\n const onInputChange = evt => {\n setPermitNumber(evt.target.value)\n onChange(evt.target.value)\n }\n\n // when form gets a keypress\n // if it's 13, submit whatever is in the box\n const onKeyPress = evt => {\n if (evt.charCode === 13) {\n handleSearch(evt)\n }\n }\n\n // \n const handleSearch = evt => {\n if (evt) {\n stopEvent(evt)\n }\n doSearch(permitNumber)\n }\n\n return
    \n

    {searchHeaderText}

    \n \n \n \n \n 0}\n />\n {error}\n \n \n \n \n \n \n
    \n}\n\n\nPermitNumberSearch.propTypes = {\n doSearch : func,\n onChange : func,\n error : string,\n searchHeaderText : string,\n}\n\nPermitNumberSearch.defaultProps = {\n doSearch : noFuncProvided,\n onChange : noFuncProvided,\n error : '',\n searchHeaderText : 'Please search for a permit.',\n}\n\nexport default PermitNumberSearch","// Libraries\r\nimport React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Card, CardBody, CardHeader, } from 'reactstrap'\r\nimport { render as ReactDOMRender, } from 'react-dom'\r\nimport { useNavigate, } from 'react-router-dom'\r\n\r\n// Components\r\nimport DataTable from '../components/DataTable'\r\n\r\n// Utilities\r\nimport { dateFormatter, } from '../utilities'\r\nimport { renderDate, } from '../utilities/columnHelpers'\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\n// format ignition date\r\nconst renderIgnitionDateTime = (data, type, row) => type === 'display' ? `${dateFormatter(data, 'MMM DD, YYYY')} ${row.PlannedIgnitionTime}` : data\r\n// generate a unit formatter\r\nconst createCellUnitFormatter = (unit) => (data, type) => data ? type === 'display' ? `${data} ${unit}` : data : ''\r\n// generate a null replacement formatter\r\nconst createCellNullFormatter = (other = '') => (data) => data ? data : other\r\n// generate a date formatter\r\nconst createCellDateFormatter = () => (data, type) => data ? renderDate(data, type) : ''\r\n\r\n// generate a navigate action to trigger when a link is clicked\r\nconst createLinkCallback = (navigate) => (e) => {\r\n stopEvent(e)\r\n if (e.target.href) {\r\n const pathname = e.target.href.replace(window.location.origin, '')\r\n navigate(pathname)\r\n window.scrollTo(0, 0)\r\n }\r\n}\r\n\r\n// create a burn request link renderer\r\nconst createRequestLinkRenderer = (navigate) => {\r\n const cellClick = createLinkCallback(navigate)\r\n const renderer = (td, cellData) => {\r\n if (cellData) {\r\n return ReactDOMRender({cellData}, td)\r\n }\r\n return td\r\n }\r\n return renderer\r\n}\r\n\r\n// create a primary (id column) burn request link renderer with multi-day icon\r\nconst createPrimaryRequestLinkRenderer = (navigate) => {\r\n const cellClick = createLinkCallback(navigate)\r\n const renderer = (td, cellData, rowData) => {\r\n if (!cellData) {\r\n return td\r\n }\r\n const requestLink = `/burn-requests/${cellData}`\r\n let ico = null\r\n if (rowData.MultiDayBurnFlag) {\r\n ico = \r\n }\r\n return ReactDOMRender(<>{cellData}{ico}, td)\r\n }\r\n return renderer\r\n}\r\n\r\n\r\n// create a burn permit number renderer for the id column\r\nconst createPermitLinkRenderer = (navigate) => {\r\n const cellClick = createLinkCallback(navigate)\r\n const renderer = (td, cellData, rowData) => {\r\n if (cellData) {\r\n return ReactDOMRender({rowData.BurnPermitNumber}, td)\r\n }\r\n return td\r\n }\r\n return renderer\r\n}\r\n\r\nconst ajaxError = (err) => {\r\n console.error(err)\r\n console.dir(err)\r\n}\r\n\r\nconst COLS = [\r\n { title: 'Id', data: 'BurnRequestId', },\r\n { title: 'Permit #', data: 'BurnPermitId', },\r\n { title: 'Priority', data: 'BurnPriority', render: createCellNullFormatter(), },\r\n { title: 'Date Requested', data: 'BurnRequestDate', render: createCellDateFormatter(), },\r\n { title: 'Ignition Date', data: 'PlannedIgnitionDate', render: renderIgnitionDateTime, },\r\n { title: 'Burn Quantity', data: 'TotalProposedBurnQuantity', render: createCellUnitFormatter('tons'), },\r\n { title: 'Burn Area', data: 'ProposedBurnArea', render: createCellUnitFormatter('acres'), },\r\n { title: 'Date Updated', data: 'UpdateDate', render: createCellDateFormatter(), },\r\n { title: 'Parent', data: 'ParentRequestId', render: createCellNullFormatter(), },\r\n { title: 'Status', data: 'BurnRequestStatusName', render: createCellNullFormatter('Not Submitted'), },\r\n]\r\n\r\nconst buildColumnDefs = (navigate) => [\r\n { targets: 0, createdCell: createPrimaryRequestLinkRenderer(navigate), className: 'text-nowrap pr-2', },\r\n { targets: 1, createdCell: createPermitLinkRenderer(navigate), },\r\n { targets: 8, createdCell: createRequestLinkRenderer(navigate), },\r\n]\r\n\r\nconst RelatedBurnRequests = ({ \r\n requestId = 0,\r\n requestStatus = '',\r\n updateDate = '',\r\n}) => {\r\n const navigate = useNavigate()\r\n const dataTable = React.useMemo(() => {\r\n let dt = null\r\n if (requestId && requestId > 0) {\r\n const columnDefs = buildColumnDefs(navigate)\r\n dt = \r\n }\r\n return dt\r\n // request status and update date is in the deps list to refresh when status changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ requestId, requestStatus, updateDate, navigate, ])\r\n\r\n if (!requestId || requestId < 1) {\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n
    Related Burn Requests
    \r\n
    \r\n \r\n {dataTable}\r\n \r\n
    \r\n )\r\n}\r\n\r\nRelatedBurnRequests.propTypes = {\r\n requestId : PropTypes.number,\r\n requestStatus : PropTypes.string,\r\n updateDate : PropTypes.string,\r\n}\r\n\r\nexport default RelatedBurnRequests","import React from 'react'\r\nimport { Formik, Field, ErrorMessage, } from 'formik'\r\nimport { Form, Label, FormFeedback, } from 'reactstrap'\r\nimport * as Yup from 'yup'\r\nimport ConfirmationModal from '../ConfirmationModal'\r\nimport PropTypes from 'prop-types'\r\n\r\nexport const cancelModalName = 'modal-cancel-burn-request'\r\nconst cancelValidationSchema = Yup.object().shape({\r\n BurnRequestId : Yup.number().required('A Burn Request Id must be provided'),\r\n BurnRequestCancellationReasonId : Yup.number().required('You must choose a Cancellation Reason.'),\r\n})\r\n\r\nconst noop = () => {}\r\nconst CancelBurnRequestModal = ({\r\n submitCancel = noop,\r\n burnRequestId = 0,\r\n cancellationReasons = [],\r\n}) => {\r\n\r\n\r\n const cancelForm = React.useRef(null)\r\n const [ showSpinner, setShowSpinner, ] = React.useState(false)\r\n\r\n const setCancelFormNode = React.useCallback((node) => {\r\n if (node) {\r\n cancelForm.current = node\r\n }\r\n }, [])\r\n\r\n const onFormikSubmit = React.useCallback((values) => {\r\n setShowSpinner(true)\r\n submitCancel(values)\r\n }, [ setShowSpinner, submitCancel, ])\r\n\r\n \r\n\r\n const onSubmitButton = React.useCallback(() => {\r\n if (cancelForm && cancelForm.current) {\r\n cancelForm.current.submitForm()\r\n }\r\n }, [])\r\n\r\n const cancellationReasonsOptions = cancellationReasons.map(c => {\r\n return \r\n })\r\n const cancelModalBody = (\r\n \r\n {({ errors, }) => (\r\n
    \r\n

    Are you sure you want to cancel this Burn Request?

    \r\n \r\n \r\n \r\n \r\n \r\n {cancellationReasonsOptions}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n return (\r\n \r\n )\r\n}\r\n\r\nCancelBurnRequestModal.propTypes = {\r\n burnRequestId : PropTypes.number,\r\n submitCancel : PropTypes.func,\r\n cancellationReasons : PropTypes.array,\r\n}\r\n\r\nexport default CancelBurnRequestModal","import React from 'react'\r\nimport { Button, } from 'reactstrap'\r\nimport PropTypes from 'prop-types'\r\nimport { \r\n deleteModalName,\r\n multiDayModalName,\r\n multiDayUpdateModalName,\r\n multiDayUpdateSubmitModalName,\r\n} from './BurnRequestForm'\r\nimport { cancelModalName, } from './Modals/CancelBurnRequest'\r\n\r\nconst BurnRequestFormButtons = ({\r\n showSaveButton = false,\r\n showSubmitButton = false,\r\n showDeleteButton = false,\r\n showCancelButton = false,\r\n isMultiDay = false,\r\n isChildRequest = false,\r\n openModal = null,\r\n submitRequestFlag = null,\r\n}) => \r\n{\r\n let buttons = [], addWrapper = showSubmitButton, wrappedButtons = []\r\n\r\n if (showSaveButton) {\r\n let saveButton = null\r\n if (isChildRequest){\r\n saveButton = (\r\n \r\n )\r\n } else {\r\n saveButton = \r\n }\r\n if (addWrapper) {\r\n wrappedButtons.push(saveButton)\r\n } else {\r\n buttons.push(saveButton)\r\n }\r\n }\r\n if (showSubmitButton){\r\n let submitButton = null\r\n if (isChildRequest || isMultiDay) {\r\n submitButton = (\r\n \r\n )\r\n } else {\r\n submitButton = (\r\n Submit\r\n )\r\n }\r\n wrappedButtons.push(submitButton)\r\n }\r\n if (showDeleteButton) {\r\n buttons.push(\r\n Delete\r\n )\r\n }\r\n if (showCancelButton) {\r\n buttons.push(\r\n Cancel\r\n )\r\n }\r\n if (addWrapper) {\r\n return <>
    {wrappedButtons}
    {buttons}\r\n }\r\n return buttons\r\n}\r\n\r\nBurnRequestFormButtons.propTypes = {\r\n showSaveButton : PropTypes.bool, \r\n showSubmitButton : PropTypes.bool, \r\n showDeleteButton : PropTypes.bool, \r\n showCancelButton : PropTypes.bool, \r\n isMultiDay : PropTypes.bool, \r\n isChildRequest : PropTypes.bool, \r\n openModal : PropTypes.func, \r\n submitRequestFlag : PropTypes.func,\r\n}\r\n\r\nexport default BurnRequestFormButtons","// Libraries\r\nimport React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { PropTypes, } from 'prop-types'\r\nimport { useSelector, useDispatch, } from 'react-redux'\r\nimport { Row, Col, FormGroup, Label, Button, FormFeedback, Card, CardBody, CardHeader, ButtonGroup, } from 'reactstrap'\r\nimport { Formik, Form as FormikForm, Field, ErrorMessage, } from 'formik'\r\n\r\n// Components\r\nimport ConfirmationModal from './ConfirmationModal'\r\nimport { CheckBoxes, RadioInputs, TimePicker, PopoverButton, RequiredLabel, ValidatingField, } from './FormControls'\r\nimport AuditData from './AuditData'\r\nimport Effect from './Effect'\r\nimport BurnRequestFormButtons from './BurnRequestFormButtons'\r\nimport CancelBurnRequestModal from './Modals/CancelBurnRequest'\r\n\r\n// Selectors\r\nimport {\r\n burnRequestCancellationReasonsForSelect,\r\n burnRequestHasPostBurn,\r\n burnRequestIsApproved,\r\n burnRequestValSchemaSelector,\r\n permitIsPileBurnOnly,\r\n} from '../selectors/burnRequestSelectors'\r\nimport { userIsBurnerOrAgent, } from '../selectors/burnPermitSelectors'\r\nimport {\r\n userCanEditAnyInfoRequiredRequest,\r\n userSeesDetailedStatus,\r\n userCanEnterAnyIgnDate,\r\n} from '../selectors/burnRequestPermissionSelectors'\r\nimport {\r\n burnedAcresByPermitSelector,\r\n burnedTonsByPermitSelector,\r\n daysOfWeekCheckboxSelector,\r\n getBurnPermit,\r\n} from '../selectors/selectors'\r\n\r\n// Actions\r\nimport BurnRequestDetailActions from '../redux/BurnRequestDetailRedux'\r\nimport UIActions from '../redux/UiRedux'\r\n\r\n// Models\r\nimport BurnRequest from '../models/BurnRequest'\r\n\r\n// Utilities\r\nimport { dateFormatter, getTodaysDate, scrollToErrors, } from '../utilities'\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n// Update these modal names in BurnRequestFormButtons.js too\r\nexport const deleteModalName = 'modal-delete-burn-request'\r\nexport const multiDayModalName = 'modal-confirm-multi-day'\r\nexport const multiDayUpdateModalName = 'modal-confirm-multi-day-update'\r\nexport const multiDayUpdateSubmitModalName = 'modal-confirm-multi-day-update-submit'\r\n\r\nconst dateFormat = 'dddd MMM D, YYYY'\r\nconst today = getTodaysDate('YYYY-MM-DD')\r\n\r\nconst BurnRequestForm = ({\r\n burnRequest = null,\r\n requestStatus = null,\r\n requestId = 0,\r\n BurnPermitId = 0,\r\n isDnr = false,\r\n IsPermitGovAgent = false,\r\n requestStatusFlags = {},\r\n}) => {\r\n // State and refs\r\n const formikRef = React.useRef(null)\r\n const [ submitting, setSubmitting, ] = React.useState(false)\r\n\r\n // Selectors\r\n const validationSchema = useSelector(burnRequestValSchemaSelector)\r\n const anyIgnitionDate = useSelector(userCanEnterAnyIgnDate)\r\n const hasPostBurn = useSelector((state) => burnRequestHasPostBurn(state, requestId))\r\n const isPileBurnOnly = useSelector((state) => permitIsPileBurnOnly(state, BurnPermitId))\r\n const isBurnerOrAgent = useSelector((state) => userIsBurnerOrAgent(state, BurnPermitId))\r\n const canEditInfoReq = useSelector(userCanEditAnyInfoRequiredRequest)\r\n const showDetailedStatus = useSelector(userSeesDetailedStatus)\r\n const IsRegionApproved = useSelector((state) => burnRequestIsApproved(state, requestId))\r\n const CancellationReasons = useSelector(burnRequestCancellationReasonsForSelect)\r\n const PlannedBurnDays = useSelector(daysOfWeekCheckboxSelector)\r\n\r\n const burnPermit = useSelector((state) => getBurnPermit(state, { BurnPermitId, }))\r\n\r\n const burnedAcres = useSelector((state) => burnedAcresByPermitSelector(state, BurnPermitId))\r\n const burnedTons = useSelector((state) => burnedTonsByPermitSelector(state, BurnPermitId))\r\n \r\n const RemainingPermitAcres = burnPermit && burnPermit.BurnPermitArea ? burnPermit.BurnPermitArea.HarvestAcres - burnedAcres : 0\r\n const RemainingPermitTonnage = burnPermit ? burnPermit.TotalPermitTonnage - burnedTons : 0\r\n\r\n // Redux actions\r\n const dispatch = useDispatch()\r\n const openModalAction = React.useCallback((modalKey) => dispatch(UIActions.openModal(modalKey)), [ dispatch, ])\r\n const submitCancel = React.useCallback((values) => dispatch(BurnRequestDetailActions.cancelBurnRequest(values)), [ dispatch, ])\r\n const submitDelete = React.useCallback((burnRequestId) => dispatch(BurnRequestDetailActions.deleteBurnRequest(burnRequestId)), [ dispatch, ])\r\n const createRequest = React.useCallback((e) => dispatch(BurnRequestDetailActions.createRequest(e)), [ dispatch, ])\r\n const submitRequest = React.useCallback((e) => dispatch(BurnRequestDetailActions.submitRequest(e)), [ dispatch, ])\r\n const agencySubmitRequest = React.useCallback((e) => dispatch(BurnRequestDetailActions.agencySubmitRequest(e)), [ dispatch, ])\r\n const saveRequest = React.useCallback((e) => dispatch(BurnRequestDetailActions.saveRequest(e)), [ dispatch, ])\r\n\r\n // UI Callbacks\r\n const submitRequestFlag = React.useCallback((e) => {\r\n stopEvent(e)\r\n setSubmitting(true)\r\n return true\r\n }, [])\r\n\r\n const confirmMultiDayUpdate = React.useCallback((isSubmit) => {\r\n if (isSubmit) {\r\n setSubmitting(true)\r\n } else if (formikRef && formikRef.current) {\r\n formikRef.current.submitForm()\r\n }\r\n return true\r\n }, [])\r\n\r\n const openModal = React.useCallback(e => {\r\n stopEvent(e)\r\n const modalKey = e.currentTarget.dataset.modalKey\r\n openModalAction(modalKey)\r\n }, [ openModalAction, ])\r\n\r\n const setFormikRefs = React.useCallback((node) => {\r\n if (node) {\r\n formikRef.current = node\r\n }\r\n return () => {\r\n if (formikRef && formikRef.current) {\r\n formikRef.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n const getBurnDays = React.useCallback((ignitionDate) => {\r\n if (!ignitionDate) {\r\n return PlannedBurnDays\r\n }\r\n\r\n const ignDate = dateFormatter(ignitionDate)\r\n const ignDay = ignDate.day()\r\n \r\n const burnDays = PlannedBurnDays.map((d, idx) => {\r\n const day = { ...d, }\r\n const diff = idx - ignDay\r\n // Day of the week after the ignition date \r\n if (diff < 0) {\r\n day.Text = ignDate.add(7 - Math.abs(diff), 'day').format(dateFormat)\r\n }\r\n // Day of the week of the ignition date\r\n else if (diff > 0) {\r\n day.Text = ignDate.add(diff, 'day').format(dateFormat)\r\n }\r\n // Day of the igition date\r\n else {\r\n day.Text = ignDate.format(dateFormat)\r\n day.Selected = true\r\n }\r\n\r\n return day\r\n }, [])\r\n\r\n return burnDays\r\n }, [ PlannedBurnDays, ])\r\n\r\n const onSaveClick = React.useCallback((values) => {\r\n const { MultiDayBurnFlag, PlannedIgnitionDate, } = values\r\n\r\n let { DaysOfWeek, } = values\r\n\r\n if (!MultiDayBurnFlag || DaysOfWeek === null) {\r\n const dayOfWeek = dateFormatter(PlannedIgnitionDate).day() + 1\r\n DaysOfWeek = [ dayOfWeek, ]\r\n }\r\n\r\n const updateObj = {\r\n BurnPermitId,\r\n PlannedIgnitionDate : dateFormatter(PlannedIgnitionDate, 'MM/DD/YYYY'),\r\n BurnRequestDate : dateFormatter(new Date(), 'MM/DD/YYYY'),\r\n MultiDayBurnFlag,\r\n PlannedIgnitionTime : values.PlannedIgnitionTime,\r\n PlannedIgnitionPeriod : values.PlannedIgnitionPeriod,\r\n ProposedBurnArea : values.ProposedBurnArea,\r\n TotalProposedBurnQuantity : values.TotalProposedBurnQuantity,\r\n RequestorComments : values.RequestorComments,\r\n BurnPriority : values.BurnPriority,\r\n BurnRequestBurnDaysXref : DaysOfWeek.map(d => { return { DayOfWeekId: d, BurnRequestId: burnRequest ? burnRequest.BurnRequestId : 0, }}),\r\n }\r\n\r\n if (!burnRequest || burnRequest.IsLocal) {\r\n // In this case we need to create a new BurnRequest with our current form values\r\n createRequest(updateObj)\r\n } else {\r\n updateObj.CreateBy = burnRequest.CreateBy\r\n updateObj.CreateDate = burnRequest.CreateDate\r\n updateObj.BurnRequestId = burnRequest.BurnRequestId\r\n updateObj.ParentRequestId = burnRequest.ParentRequestId\r\n if (submitting) {\r\n if (IsPermitGovAgent === true) {\r\n agencySubmitRequest(updateObj)\r\n } else {\r\n submitRequest(updateObj)\r\n }\r\n } else {\r\n saveRequest(updateObj)\r\n }\r\n }\r\n setSubmitting(false)\r\n }, [ setSubmitting, submitting, burnRequest, BurnPermitId, saveRequest, submitRequest, agencySubmitRequest, createRequest, IsPermitGovAgent, ])\r\n\r\n // Effects\r\n React.useEffect(() => {\r\n const formik = formikRef\r\n if (submitting === true) {\r\n if (formik && formik.current) {\r\n formik.current.submitForm()\r\n } else {\r\n setSubmitting(false)\r\n }\r\n }\r\n }, [ submitting, ])\r\n \r\n\r\n // render vars \r\n const { IsApproved, IsInfoRequired, IsSubmitted, IsCancelled, IsUnderReview, IsDenied, IsLocked, } = requestStatusFlags\r\n const postBurnRoute = burnRequest ? `/burn-requests/${burnRequest.BurnRequestId}/postburn` : null\r\n let currentStatus = ''\r\n if (requestStatus) {\r\n if (showDetailedStatus && (IsSubmitted && !IsApproved)) {\r\n currentStatus = '(Awaiting Smoke Management Review)'\r\n }\r\n else if (IsApproved && showDetailedStatus && !IsRegionApproved) {\r\n currentStatus = '(Awaiting Region Review)'\r\n }\r\n else {\r\n currentStatus = `(${requestStatus.Status})`\r\n }\r\n }\r\n let readOnly = true\r\n if (IsInfoRequired && (isBurnerOrAgent || canEditInfoReq)) {\r\n readOnly = false\r\n } else {\r\n readOnly = IsCancelled || IsApproved || IsSubmitted || IsUnderReview || IsDenied || IsLocked\r\n }\r\n // only allow DNR users to edit auto-generated burn request\r\n if (!isDnr && burnRequest && burnRequest.AutoGenerated) {\r\n readOnly = true\r\n }\r\n\r\n const isChildRequest = (burnRequest ? (!!burnRequest.ParentRequestId) : false)\r\n const initialValues = React.useMemo(() => {\r\n return {\r\n DaysOfWeek : burnRequest ? burnRequest.DaysOfWeek : null,\r\n MultiDayBurnFlag : burnRequest ? burnRequest.MultiDayBurnFlag : '',\r\n BurnPriority : burnRequest ? burnRequest.BurnPriority || '' : '',\r\n PlannedIgnitionDate : burnRequest ? dateFormatter(burnRequest.PlannedIgnitionDate, 'YYYY-MM-DD') : '',\r\n PlannedIgnitionPeriod : burnRequest ? burnRequest.PlannedIgnitionPeriod : '',\r\n PlannedIgnitionTime : burnRequest ? burnRequest.PlannedIgnitionTime : '',\r\n TotalProposedBurnQuantity : burnRequest ? burnRequest.TotalProposedBurnQuantity : '',\r\n ProposedBurnArea : burnRequest ? burnRequest.ProposedBurnArea : '',\r\n RequestorComments : burnRequest ? burnRequest.RequestorComments || '' : '',\r\n ParentRequestId : burnRequest ? burnRequest.ParentRequestId || '' : '',\r\n RemainingPermitAcres : RemainingPermitAcres || 0.0,\r\n RemainingPermitTonnage : RemainingPermitTonnage || 0.0,\r\n }\r\n }, [ RemainingPermitAcres, RemainingPermitTonnage, burnRequest, ])\r\n\r\n return (<>\r\n \r\n \r\n
    \r\n

    Burn Request

    \r\n { (!burnRequest || !burnRequest.AutoGenerated) && { currentStatus } }\r\n
    \r\n {\r\n isChildRequest && \r\n \r\n Child of {burnRequest.ParentRequestId}\r\n \r\n \r\n \r\n }\r\n {\r\n (requestStatus || (burnRequest && burnRequest.AutoGenerated)) && \r\n \r\n {hasPostBurn ? 'View': 'Enter'} Post Burn\r\n \r\n }\r\n
    \r\n \r\n \r\n {({ values, errors, isSubmitting, }) => (\r\n \r\n scrollToErrors()} />\r\n { burnRequest && burnRequest.AutoGenerated && \r\n \r\n This Burn Request was system generated for Post-Burn report \r\n \r\n }\r\n \r\n \r\n \r\n \r\n Ignition Date\r\n { \r\n isChildRequest && Ignition Date is locked becuase this request is a part of a series of multi-day requests.

    }\r\n />\r\n }\r\n
    \r\n {\r\n const { value, name, } = e.target\r\n if (value) {\r\n const dayOfWeek = dateFormatter(value).day() + 1\r\n formikRef.current.setFieldValue('DaysOfWeek', [ dayOfWeek, ])\r\n }\r\n formikRef.current.setFieldValue(name, value)\r\n }}\r\n />\r\n
    \r\n \r\n \r\n \r\n \r\n Ignition Time\r\n { \r\n isChildRequest && Ignition Date is locked becuase this request is a part of a series of multi-day requests.

    }\r\n />\r\n }\r\n
    \r\n \r\n {({ field, }) => (\r\n !readOnly\r\n ?\r\n {\r\n formikRef.current.setFieldValue(field.name, value)\r\n }}\r\n >\r\n <>\r\n \r\n \r\n {errorMessage => {errorMessage}}\r\n \r\n \r\n \r\n :\r\n \r\n )}\r\n \r\n
    \r\n \r\n \r\n \r\n Ignition Period (mins)\r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n Acres to Burn\r\n \r\n \r\n \r\n \r\n \r\n Tons to Burn\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Burn Duration\r\n \r\n { isChildRequest &&

    Burn Duration and Burn Days are locked because this request is a part of a series of Multi-Day burn requests.

    }\r\n
      \r\n
    • A Single Day burn is a burn that is ignited and extinguished on the Ignition Date
    • \r\n
    • A Multi-Day burn is a burn that is ignited on the Ignition Date and extinguished on a later date
    • \r\n
    \r\n \r\n }\r\n />\r\n
    \r\n
    \r\n \r\n {({ field, form, }) => (\r\n <>\r\n { !readOnly &&\r\n \r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, false)\r\n }}\r\n style={{ boxShadow: 'none', }}\r\n disabled={IsApproved}\r\n >\r\n Single\r\n \r\n {\r\n stopEvent(e)\r\n form.setFieldValue(field.name, true)\r\n }}\r\n style={{ boxShadow: 'none', }}\r\n disabled={IsApproved || isPileBurnOnly || isChildRequest}\r\n >\r\n Multi-day\r\n \r\n \r\n }\r\n \r\n \r\n {errorMessage => {errorMessage}}\r\n \r\n \r\n )}\r\n \r\n
    \r\n \r\n \r\n {\r\n typeof values.MultiDayBurnFlag === 'boolean' &&\r\n \r\n {({ field, form, }) => (\r\n <>\r\n {\r\n values.MultiDayBurnFlag\r\n ? \r\n : \r\n }\r\n \r\n )}\r\n \r\n }\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n { burnRequest && }\r\n
    \r\n )}\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nBurnRequestForm.propTypes = {\r\n burnRequest : PropTypes.object,\r\n requestStatus : PropTypes.object,\r\n requestId : PropTypes.number,\r\n BurnPermitId : PropTypes.number,\r\n isDnr : PropTypes.bool,\r\n IsPermitGovAgent : PropTypes.bool,\r\n requestStatusFlags : PropTypes.object,\r\n}\r\n\r\nexport default BurnRequestForm","/* eslint-disable no-dupe-else-if */\r\n// Libraries\r\nimport React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport { object, number, string, bool, func, array, PropTypes, } from 'prop-types'\r\nimport { connect, } from 'react-redux'\r\nimport { Container, Row, Col, Button, Card, CardBody, CardHeader, CardFooter, Alert, Badge, } from 'reactstrap'\r\n\r\n// Components\r\nimport BurnRequestReview from '../components/BurnRequestReview'\r\nimport BurnPermitSummaryCard from '../components/BurnPermitSummary'\r\nimport PermitNumberSearch from '../components/PermitNumberSearch'\r\nimport RelatedBurnRequests from '../components/RelatedBurnRequests'\r\nimport PostBurnPrompt from '../components/PostBurnPrompt'\r\nimport BurnRequestForm from '../components/BurnRequestForm'\r\nimport withRouter from '../components/withRouter'\r\n\r\n// Selectors\r\nimport {\r\n burnRequestByIdSelector,\r\n burnRequestStatus,\r\n burnRequestCancellationReasonsForSelect,\r\n burnRequestHasPostBurn,\r\n burnRequestStatusObjSelector,\r\n burnRequestIsApproved,\r\n burnRequestValSchemaSelector,\r\n reqCanSubmitWithoutSignature,\r\n permitIsPileBurnOnly,\r\n} from '../selectors/burnRequestSelectors'\r\nimport {\r\n permitIsActiveSelector,\r\n permitHasPermitSignatures,\r\n permitPeopleIds,\r\n permitIsInUGA,\r\n permitIsForForestHealth,\r\n permitHasSignedPermitDoc,\r\n} from '../selectors/burnPermitSelectors'\r\nimport {\r\n userIsSmokeMgmt,\r\n userIsUnverifiedAgent,\r\n userPersonIdSelector,\r\n} from '../selectors/userSelectors'\r\nimport { permitByBurnPermitNumberSelector, } from '../selectors/selectors'\r\nimport { postBurnPromptSelector, } from '../selectors/postBurnSelectors'\r\nimport { userMakesSMDecisions, } from '../selectors/personSelectors'\r\nimport { signatureByPermitId, } from '../selectors/burnPermitSignatureSelectors'\r\nimport {\r\n userCanEditAnyInfoRequiredRequest,\r\n userSeesDetailedStatus,\r\n userCanEnterAnyIgnDate,\r\n userSeesPostBurnPrompt,\r\n userCanOverrideDecisions,\r\n userCanBypassSignature,\r\n} from '../selectors/burnRequestPermissionSelectors'\r\nimport { userCreatesGovAgentPermits, } from '../selectors/burnPermitPermissionSelectors'\r\n\r\n// Actions\r\nimport AppActions from '../redux/AppRedux'\r\nimport BurnRequestDetailActions from '../redux/BurnRequestDetailRedux'\r\nimport PostBurnActions from '../redux/PostBurnRedux'\r\nimport BurnPermitFormActions from '../redux/BurnPermitFormRedux'\r\n\r\n// Models\r\n\r\n// Utilities\r\nimport { getTomorrowsDate, queryParamsToObject, } from '../utilities'\r\nimport stopEvent from '../utilities/stopEvent'\r\nimport { authPropsTypes, authPropsDefaults, } from '../utilities/props'\r\n\r\n// Constants\r\nconst noopAction = () => {\r\n console.error('An action was not executed')\r\n}\r\nexport class BurnRequestDetailContainer extends React.Component {\r\n static propTypes = {\r\n // from withRouter HOC\r\n location : object,\r\n params : object,\r\n\r\n // from parent\r\n canBypassSignature : bool,\r\n online : bool,\r\n\r\n // selectors\r\n burnRequest : object,\r\n BurnPermitId : number,\r\n requestStatus : object,\r\n CancellationReasons : array,\r\n createsGovAgentPermits : bool,\r\n searchParam : string,\r\n LoadingBurnRequest : bool,\r\n PermitFailedToLoad : bool,\r\n permitIsActive : array,\r\n requestId : number,\r\n postBurnPrompt : PropTypes.arrayOf(object),\r\n permitIsSigned : object,\r\n hasSignedPermitDocs : bool,\r\n hasPostBurn : bool,\r\n\r\n // actions\r\n SetPageTitle : func,\r\n GetBurnRequestInfo : func,\r\n ResetToInitial : func,\r\n UpdateSearchParam : func,\r\n GetBurnPermitInfo : func,\r\n ClearPostBurnStatus : func,\r\n GetPostBurnStatus : func,\r\n GetPostBurnsByRequestId : func,\r\n GetPostBurnsByPermit : func,\r\n isSmokeMgmt : bool,\r\n IsRegionApproved : bool,\r\n MakesSMDecisions : bool,\r\n CanOverrideDecisions : bool,\r\n ...authPropsTypes,\r\n IsPermitGovAgent : bool,\r\n isInUGA : bool,\r\n ShowForestHealth : bool,\r\n }\r\n\r\n static defaultProps = {\r\n PostBurnValidationSchema : null,\r\n canBypassSignature : false,\r\n createsGovAgentPermits : false,\r\n permitIsActive : [ false, '', ],\r\n ClearPostBurnStatus : noopAction,\r\n GetPostBurnStatus : noopAction,\r\n PermitFailedToLoad : false,\r\n ...authPropsDefaults,\r\n }\r\n\r\n state = {\r\n BurnPermitNumber : '',\r\n BurnPermitNumberError : '',\r\n initialized : false,\r\n showSpinner : false,\r\n expandPostBurnPrompt : false,\r\n }\r\n\r\n componentDidMount () {\r\n const { SetPageTitle, GetBurnRequestInfo, online, GetPostBurnsByRequestId, GetPostBurnsByPermit, } = this.props\r\n \r\n const { BurnRequestId, } = this.props.params\r\n if (online && this.props.showPostBurnPrompt) {\r\n this.props.GetPostBurnStatus()\r\n }\r\n\r\n if (BurnRequestId && BurnRequestId !== 'new') {\r\n SetPageTitle(`Burn Request #${BurnRequestId}`)\r\n \r\n if (online) {\r\n GetBurnRequestInfo(BurnRequestId)\r\n GetPostBurnsByRequestId(BurnRequestId)\r\n }\r\n }\r\n else {\r\n SetPageTitle('New Burn Request')\r\n const params = queryParamsToObject()\r\n if (params !== null && params.burnPermitNumber) {\r\n GetPostBurnsByPermit(null, params.burnPermitNumber)\r\n }\r\n }\r\n\r\n this.tomorrow = getTomorrowsDate('YYYY-MM-DD')\r\n const { search, } = this.props.location\r\n if (search) {\r\n const BurnPermitNumber = search.replace('?', '').split('=')[1]\r\n this.onPermitSearchChanged(BurnPermitNumber)\r\n this.doPermitSearch(BurnPermitNumber)\r\n }\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.ResetToInitial()\r\n this.props.ClearPostBurnStatus()\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { location, } = this.props\r\n\r\n // If the user tries to navigate to /burn-request/new again, or if they created and saved a request then go to /new again\r\n // clear the current burn permit to restore the search\r\n if ((prevProps.location.key !== location.key) && this.props.params.BurnRequestId === 'new') {\r\n this.setState({ BurnPermitNumber: '', })\r\n this.props.UpdateSearchParam('')\r\n return\r\n }\r\n\r\n if (prevProps.PermitFailedToLoad === false && this.props.PermitFailedToLoad) {\r\n this.setState({ BurnPermitNumberError: 'Could not find a matching Burn Permit for the provided Burn Permit Number.', })\r\n }\r\n\r\n const { requestId, } = this.props\r\n if (prevProps.requestId !== requestId && requestId && requestId !== 'new') {\r\n this.props.SetPageTitle(`Burn Request #${requestId}`)\r\n if (this.props.online) {\r\n this.props.GetBurnRequestInfo(requestId)\r\n this.props.GetPostBurnsByRequestId(requestId)\r\n }\r\n }\r\n }\r\n\r\n togglePostBurn = () => {\r\n this.setState({ expandPostBurnPrompt: !this.state.expandPostBurnPrompt, })\r\n }\r\n\r\n reloadRequest = evt => {\r\n stopEvent(evt)\r\n let requestId\r\n if (this.props.burnRequest && Number.isInteger(this.props.burnRequest.BurnRequestId)) {\r\n requestId = this.props.burnRequest.BurnRequestId\r\n }\r\n if (this.props.online) {\r\n if (requestId > -1) {\r\n this.props.GetBurnRequestInfo(this.props.burnRequest.BurnRequestId)\r\n }\r\n else {\r\n window.location.reload()\r\n }\r\n }\r\n }\r\n\r\n onPermitSearchChanged = permitNumber => {\r\n if (this.props.PermitFailedToLoad){\r\n this.props.ClearPermitLoadFail()\r\n }\r\n this.setState({ BurnPermitNumber: permitNumber, BurnPermitNumberError: '', })\r\n }\r\n\r\n doPermitSearch = permitNumber => {\r\n if (!this.state.initialized) {\r\n this.setState({ initialized: true, })\r\n }\r\n if (permitNumber) {\r\n this.props.UpdateSearchParam(permitNumber)\r\n if (this.props.online) {\r\n this.props.GetBurnPermitInfo(permitNumber)\r\n }\r\n return\r\n }\r\n this.setState({ BurnPermitNumberError: 'You must provide a valid Burn Permit Number.', })\r\n }\r\n\r\n render () {\r\n const { BurnRequestId, } = this.props.params\r\n\r\n const { LoadingBurnRequest, canBypassSignature, isSmokeMgmt, } = this.props\r\n\r\n let message\r\n if (LoadingBurnRequest) {\r\n message = 'Loading Burn Request...'\r\n }\r\n else if (BurnRequestId !== 'new' && BurnRequestId > -1 && !this.props.burnRequest) {\r\n message = 'Burn Request not found.'\r\n }\r\n\r\n if (message) {\r\n return (\r\n \r\n \r\n \r\n

    {message}

    \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n const {\r\n burnRequest,\r\n BurnPermitId,\r\n requestStatus,\r\n permitIsSigned,\r\n hasSignedPermitDocs,\r\n IsRegionApproved,\r\n MakesSMDecisions,\r\n CanOverrideDecisions,\r\n IsPermitGovAgent,\r\n isInUGA,\r\n showDetailedStatus,\r\n requestStatusFlags,\r\n } = this.props\r\n\r\n const { IsApproved, IsSubmitted, IsCancelled, IsDenied, } = requestStatusFlags\r\n\r\n const {\r\n BurnPermitNumber,\r\n BurnPermitNumberError,\r\n } = this.state\r\n\r\n let children\r\n\r\n const agencySigned = permitIsSigned.agency || hasSignedPermitDocs\r\n const applicantSigned = permitIsSigned.applicant || hasSignedPermitDocs\r\n const bypassSignature = (permitIsSigned.dnrSubmission && canBypassSignature) || IsPermitGovAgent || this.props.isGovAutoPermit\r\n\r\n if (!BurnPermitId) {\r\n children = \r\n }\r\n else if (!burnRequest && BurnPermitId && !this.props.permitIsActive[0]) {\r\n children = \r\n \r\n \r\n

    Burn Requests cannot be submitted for this permit. {this.props.permitIsActive[1]}

    \r\n \r\n
    \r\n }\r\n else if (!BurnPermitId && (!BurnPermitNumber || BurnPermitNumber.length === 0)) {\r\n children =\r\n \r\n \r\n

    Burn Permit does not have a valid Burn Permit Number

    \r\n \r\n
    \r\n }\r\n else if (!burnRequest && BurnPermitNumber && !bypassSignature && (!agencySigned || !applicantSigned)) {\r\n let bodyText = null\r\n if (agencySigned) {\r\n bodyText = <>\r\n

    Permit {BurnPermitNumber} has been Issued and signed by a DNR representative.

    \r\n

    Before submitting Burn Requests or burning with this permit, you will need to review any conditions set for your permit and\r\n digitally sign with DocuSign. You can sign your permit at any time using the link in the Signature section of \r\n your Burn Permit.\r\n

    \r\n

    Use the link below to review your Burn Permit and sign when you are ready.

    \r\n \r\n } else {\r\n bodyText = <>\r\n

    Permit {BurnPermitNumber} has been Issued but is awaiting a signture from a DNR representative and cannot be used to burn or submit Burn Requests.

    \r\n

    Review the Application and Permit Status section of your permit to check for any changes to the status of your permit.

    \r\n

    Use the link below to navigte to your permit.

    \r\n \r\n }\r\n \r\n children =\r\n \r\n \r\n \r\n \r\n Burn Permit {BurnPermitNumber} is Awaiting Signature\r\n \r\n \r\n {bodyText}\r\n \r\n \r\n Review my Permit\r\n \r\n \r\n \r\n \r\n }\r\n else { \r\n const statusName = requestStatus ? requestStatus.Status || '' : ''\r\n children =\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {\r\n burnRequest && !LoadingBurnRequest && <>\r\n {\r\n this.props.online &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n { requestStatus && \r\n \r\n {/* This will still show for cancelled requests for DNR users that can override decisions */}\r\n \r\n \r\n } \r\n \r\n }\r\n \r\n }\r\n const multiDayIcon = burnRequest && burnRequest.MultiDayBurnFlag === true ? : null\r\n const header = BurnRequestId ? `Burn Request #${BurnRequestId}` : 'Request Smoke Management Approval'\r\n const { postBurnPrompt, ShowForestHealth, } = this.props\r\n const hasPostBurnPrompt = postBurnPrompt && postBurnPrompt.length > 0\r\n return \r\n \r\n \r\n

    \r\n {header}{multiDayIcon}\r\n { isInUGA && In a UGA }\r\n { ShowForestHealth && }\r\n

    \r\n \r\n \r\n \r\n \r\n
    \r\n {\r\n hasPostBurnPrompt && \r\n \r\n \r\n \r\n \r\n }\r\n {\r\n showDetailedStatus && (IsSubmitted && !IsApproved) && \r\n \r\n

    Awaiting Smoke Management Review.

    \r\n \r\n
    \r\n }\r\n {\r\n IsApproved && !IsRegionApproved && \r\n \r\n

    Awaiting Region Review.

    \r\n \r\n
    \r\n }\r\n {children}\r\n
    \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { BurnRequestDetail, } = state\r\n\r\n const { BurnRequestId, } = props.params\r\n const requestId = parseInt(BurnRequestId)\r\n let burnRequest = null, requestStatus = null, BurnPermitId = null, postBurnPrompt = [], hasPostBurn = false\r\n let requestStatusObj = {}, IsRegionApproved = false\r\n if (!isNaN(requestId)) {\r\n burnRequest = burnRequestByIdSelector(state, requestId)\r\n requestStatus = burnRequestStatus(state, requestId)\r\n hasPostBurn = burnRequestHasPostBurn(state, requestId)\r\n requestStatusObj = burnRequestStatusObjSelector(state, requestId)\r\n if (requestStatusObj && requestStatusObj.IsApproved) {\r\n IsRegionApproved = burnRequestIsApproved(state, requestId)\r\n }\r\n }\r\n\r\n if (burnRequest) {\r\n BurnPermitId = burnRequest.BurnPermitId\r\n }\r\n\r\n const BurnPermitNumber = BurnRequestDetail.searchParam\r\n if (!BurnPermitId && BurnPermitNumber && BurnPermitNumber.length > 0) {\r\n const burnPermit = permitByBurnPermitNumberSelector(state, BurnPermitNumber)\r\n if (burnPermit) {\r\n BurnPermitId = burnPermit.BurnPermitId\r\n }\r\n }\r\n\r\n let CancellationReasons = []\r\n if (requestStatus && !hasPostBurn) {\r\n CancellationReasons = burnRequestCancellationReasonsForSelect(state)\r\n }\r\n\r\n const { AgentId, BurnerId, } = permitPeopleIds(state, BurnPermitId)\r\n const userPersonId = userPersonIdSelector(state)\r\n let IsPermitGovAgent = false\r\n const createsGovAgentPermits = userCreatesGovAgentPermits(state)\r\n if (createsGovAgentPermits) {\r\n if (!isNaN(AgentId) && (userPersonId === AgentId)) {\r\n IsPermitGovAgent = true \r\n } else if (!isNaN(BurnerId) && (userPersonId === BurnerId)) {\r\n IsPermitGovAgent = true\r\n }\r\n }\r\n const permitIsActive = permitIsActiveSelector(state, BurnPermitId)\r\n\r\n if (props.showPostBurnPrompt) {\r\n postBurnPrompt = postBurnPromptSelector(state)\r\n }\r\n\r\n const MakesSMDecisions = userMakesSMDecisions(state, userPersonId)\r\n const CanOverrideDecisions = userCanOverrideDecisions(state)\r\n \r\n const { online, } = state.offline\r\n return {\r\n online,\r\n burnRequest,\r\n requestStatus,\r\n CancellationReasons,\r\n permitIsActive,\r\n requestId,\r\n BurnPermitId,\r\n hasPostBurn,\r\n ...requestStatusObj,\r\n IsRegionApproved,\r\n MakesSMDecisions,\r\n CanOverrideDecisions,\r\n postBurnPrompt,\r\n IsPermitGovAgent,\r\n requestStatusFlags : requestStatusObj,\r\n searchParam : BurnRequestDetail.searchParam,\r\n LoadingBurnRequest : BurnRequestDetail.loadingBurnRequest,\r\n PermitFailedToLoad : state.BurnPermitForm.permitFailedToLoad,\r\n isSmokeMgmt : userIsSmokeMgmt(state),\r\n permitIsSigned : permitHasPermitSignatures(state, BurnPermitId),\r\n hasSignedPermitDocs : permitHasSignedPermitDoc(state, BurnPermitId),\r\n Signature : signatureByPermitId(state, BurnPermitId),\r\n validationSchema : burnRequestValSchemaSelector(state),\r\n isInUGA : permitIsInUGA(state, BurnPermitId),\r\n ShowForestHealth : permitIsForForestHealth(state, BurnPermitId),\r\n isGovAutoPermit : reqCanSubmitWithoutSignature(state, BurnPermitId),\r\n isPileBurnOnly : permitIsPileBurnOnly(state, BurnPermitId),\r\n canEditInfoReq : userCanEditAnyInfoRequiredRequest(state),\r\n showDetailedStatus : userSeesDetailedStatus(state),\r\n anyIgnitionDate : userCanEnterAnyIgnDate(state),\r\n showPostBurnPrompt : userSeesPostBurnPrompt(state),\r\n canBypassSignature : userCanBypassSignature(state),\r\n isUnverifiedAgent : userIsUnverifiedAgent(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n GetBurnRequestInfo : BurnRequestDetailActions.getBurnRequestInfo,\r\n ResetToInitial : BurnRequestDetailActions.resetRequestToInitial,\r\n UpdateSearchParam : BurnRequestDetailActions.updateRequestSearchParam,\r\n GetBurnPermitInfo : BurnRequestDetailActions.getBurnPermitInfo,\r\n GetPostBurnStatus : PostBurnActions.getPbPromptsForUser,\r\n ClearPostBurnStatus : PostBurnActions.clearPostBurnPrompt,\r\n GetPostBurnsByRequestId : PostBurnActions.getPostBurnsByRequestId,\r\n GetPostBurnsByPermit : PostBurnActions.getPostBurnsByPermit,\r\n ClearPermitLoadFail : BurnPermitFormActions.resetPermitLoadFail,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(BurnRequestDetailContainer))","// Libraries\nimport React, { useCallback, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { \n Button, \n Row, \n Col, \n FormGroup, \n Input, \n Label,\n Alert,\n Fade,\n Form,\n Card,\n CardBody,\n} from 'reactstrap'\nimport { bool, } from 'prop-types'\n\n// Components\nimport { AssignedStaff, AutoComplete, RowToggler, Select, } from '../FormControls'\nimport { ApplicationId, PermitNumber, SearchInput, NumberRange, UGA, ForestHealth, } from '../SearchInputs'\n\n// Reducers\nimport AppActions from '../../redux/AppRedux'\nimport BurnPermitSearchActions, { INITIAL_SEARCH_PARAMS, } from '../../redux/BurnPermitSearchRedux'\n\n// Selectors\nimport { regionsForSelectSelector, } from '../../selectors/regionSelectors'\nimport {\n countySelectSelector,\n getDnrUsersForSelect,\n permitApplicationStatuses,\n permitStatuses,\n burnTypesCheckboxSelector,\n} from '../../selectors/selectors'\nimport { userCanSearchByAssignee, } from '../../selectors/permissionSelectors'\nimport { burnPermitSearchDataSelector, } from '../../selectors/burnPermitSelectors'\n\n// Hooks\nimport {\n useInputChange,\n usePermitSearchActions,\n useSearchLookupsFetch,\n useEnterPressHandler,\n useAutoComplete,\n} from './hooks'\n\n\nfunction initState (nextState = null) {\n if (nextState) {\n return { ...nextState, }\n }\n return {\n searchParams: { ...INITIAL_SEARCH_PARAMS, },\n }\n}\n\nfunction searchFormReducer (state, action) {\n if (!action || !action.type) {\n return state\n }\n switch (action.type) {\n case 'INPUT_CHANGE': {\n if (!action.payload) {\n break\n }\n const nextParams = { ...state.searchParams, ...action.payload, }\n return { ...state, searchParams: nextParams, }\n }\n case 'RESET_PARAMS' : {\n return initState()\n }\n default: \n break\n }\n return state\n}\n\nconst SearchFormCard = (props) => {\n const { isAuthenticated, } = props\n\n const BurnTypes = useSelector(burnTypesCheckboxSelector)\n const ApplicationStatuses = useSelector(permitApplicationStatuses)\n const PermitStatuses = useSelector(permitStatuses)\n const Regions = useSelector(regionsForSelectSelector)\n const Counties = useSelector(countySelectSelector)\n const dnrUsers = useSelector(getDnrUsersForSelect)\n const canSearchAssignee = useSelector(userCanSearchByAssignee)\n const reduxDispatch = useDispatch()\n\n // hook to request lookup data on mount\n useSearchLookupsFetch(reduxDispatch, canSearchAssignee)\n\n const { showLocation, showMap, searchWarning, searchParams: savedSearchParams, } = useSelector(burnPermitSearchDataSelector)\n\n const [ state, dispatch, ] = React.useReducer(searchFormReducer, {\n searchParams: savedSearchParams,\n }, initState)\n\n const { searchParams, } = state\n\n const [ dispatchInputChange, onChange, onSelect, ] = useInputChange(dispatch)\n\n const onAutoComplete = useCallback(e => {\n const { name, id, value, } = e.target\n dispatchInputChange({ [name]: value, [`${name}Id`]: id, })\n }, [ dispatchInputChange, ])\n\n const [ assignedStaffChange, ] = useAutoComplete('AssignedTo', onAutoComplete)\n\n const [ regionAutoChange, ] = useAutoComplete('Region', onAutoComplete)\n\n const [ countyAutoChange, ] = useAutoComplete('County', onAutoComplete)\n\n const onReset = React.useCallback(() => { dispatch({ type: 'RESET_PARAMS', }) }, [])\n const [ onToggleMap, toggleLocation, onResetClick, ] = usePermitSearchActions(reduxDispatch, onReset)\n\n /**\n * Search button handler, update redux with new search values \n */\n const onSearchClick = React.useCallback(() => {\n reduxDispatch(AppActions.showLoading())\n reduxDispatch(BurnPermitSearchActions.searchBurnPermits(searchParams))\n }, [ reduxDispatch, searchParams, ])\n\n const handleKeyPress = useEnterPressHandler(onSearchClick)\n\n const assignedUserSelect = React.useMemo(() => {\n let assignedTo = ''\n if (searchParams) {\n assignedTo = searchParams.AssignedTo\n }\n if (canSearchAssignee && dnrUsers && dnrUsers.length > 0) {\n return (\n \n \n \n \n \n )\n }\n return null\n }, [ searchParams, assignedStaffChange, canSearchAssignee, dnrUsers, ])\n\n return \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n {\n isAuthenticated && <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n { assignedUserSelect }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {searchWarning}\n \n \n \n \n \n \n
    \n
    \n
    \n}\n\nSearchFormCard.propTypes = {\n isAuthenticated: bool,\n}\n\nexport default React.memo(SearchFormCard)\n","// Libraries\r\nimport React from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Container, } from 'reactstrap'\r\nimport { bool, } from 'prop-types'\r\n\r\n// Reducers\r\nimport AppActions from '../redux/AppRedux'\r\nimport PermitSearchActions from '../redux/BurnPermitSearchRedux'\r\n\r\n// Components\r\nimport { BurnPermitTableInner, } from '../components/Search/BurnPermitTable'\r\nimport SearchFormCard from '../components/Search/BurnPermitSearchForm'\r\n\r\n// Selectors\r\nimport { permitSearchSelector, permitsOfflineSelector, } from '../selectors/burnPermitSelectors'\r\nimport { useCart, } from '../components/Search/useCart'\r\nimport ExportPermits from '../components/ExportPermits'\r\nimport Cart from '../components/PermitOrders/Cart'\r\n\r\n// Hooks\r\nimport { useOnlineSelector, } from '../hooks'\r\n\r\nconst LARGE_RESULT_CLEAR_MSG = 'Your search results were cleared because your search returned over '\r\n + '1,000 records which degrades the performance of the application. Please click the Search '\r\n + 'button to execute your search again.'\r\n\r\nconst BurnPermitSearchContainer = ({\r\n isDnr,\r\n isAuthenticated,\r\n isAdmin,\r\n}) => {\r\n const reduxDispatch = useDispatch()\r\n const online = useOnlineSelector()\r\n const permits = useSelector((state) => {\r\n if (online) {\r\n return permitSearchSelector(state)\r\n } else {\r\n return permitsOfflineSelector(state)\r\n }\r\n })\r\n const [ cart, cartActions, order, ] = useCart()\r\n\r\n React.useEffect(() => {\r\n reduxDispatch(AppActions.setPageTitle('Permit Search'))\r\n reduxDispatch(PermitSearchActions.setDownloadingPermitsExport(false))\r\n return () => {\r\n if (online && reduxDispatch && permits && permits.length > 1000) {\r\n reduxDispatch(PermitSearchActions.resetPermitResults(LARGE_RESULT_CLEAR_MSG))\r\n }\r\n reduxDispatch(PermitSearchActions.setDownloadingPermitsExport(false))\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n const showMap = useSelector((state) => {\r\n if (state && state.BurnPermitSearch) {\r\n return state.BurnPermitSearch.showMap\r\n }\r\n return false\r\n })\r\n\r\n\r\n return (\r\n \r\n
    \r\n

    Search Burn Permits

    \r\n
    \r\n { isAdmin && }\r\n { isDnr && }\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nBurnPermitSearchContainer.propTypes = {\r\n isDnr : bool,\r\n isAuthenticated : bool,\r\n isAdmin : bool,\r\n}\r\n\r\nexport default BurnPermitSearchContainer","// Libraries\nimport React, { useCallback, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { bool, } from 'prop-types'\nimport {\n Button,\n Row,\n Col,\n FormGroup,\n Label,\n Card,\n CardBody,\n Alert,\n Fade,\n Input,\n ButtonGroup,\n} from 'reactstrap'\n\n// Reducers\nimport ApiActions from '../../redux/ApiRedux'\nimport AppActions from '../../redux/AppRedux'\nimport BurnRequestSearchActions from '../../redux/BurnRequestSearchRedux'\n\n// Selectors\nimport { userCanSearchByAssignee, } from '../../selectors/permissionSelectors'\nimport { regionsForSelectSelector, } from '../../selectors/regionSelectors'\nimport {\n burnTypesCheckboxSelector,\n countySelectSelector,\n} from '../../selectors/selectors'\nimport { burnRequestSearchDataSelector, burnRequestStatuses, } from '../../selectors/burnRequestSelectors'\n\n// Components\nimport { AssignedStaff, AutoComplete, RowToggler, Select, } from '../FormControls'\nimport { PermitNumber, SearchInput, DateRange, NumberRange, UGA, ForestHealth, } from '../SearchInputs'\n\n// Utilities\nimport { INITIAL_SEARCH_PARAMS, } from '../../redux/BurnRequestSearchRedux'\n\n// Hooks\nimport {\n useInputChange,\n useSearchLookupsFetch,\n useEnterPressHandler,\n useSearchDateClick,\n useRequestSearchActions,\n useAutoComplete,\n} from './hooks'\n\nconst initialState = {\n searchParams: { \n ...INITIAL_SEARCH_PARAMS,\n },\n datesValid: {\n BurnRequestDateValid : true, \n PlannedIgnitionDateValid : true,\n },\n}\n\nfunction initState (nextState = null) {\n if (nextState) {\n return { ...nextState, }\n }\n return { \n ...initialState, \n datesValid: { ...initialState.datesValid, },\n }\n}\n\nfunction searchFormReducer (state, action) {\n if (!action || !action.type) {\n return state\n }\n switch (action.type) {\n case 'INPUT_CHANGE': {\n if (!action.payload) {\n break\n }\n const nextParams = { ...state.searchParams, ...action.payload, }\n return { ...state, searchParams: nextParams, }\n }\n case 'RESET_PARAMS' : {\n return initState()\n }\n case 'SET_DATE_VALID' : {\n if (!action.payload) {\n break\n }\n const nextDatesValid = { ...state.datesValid, ...action.payload, }\n return { ...state, datesValid: nextDatesValid, }\n }\n default: \n break\n }\n return state\n}\n\nconst BurnRequestSearchForm = ({ \n isAuthenticated,\n}) => {\n const BurnTypes = useSelector(burnTypesCheckboxSelector)\n const Counties = useSelector(countySelectSelector)\n const Regions = useSelector(regionsForSelectSelector)\n const BurnRequestStatuses = useSelector(burnRequestStatuses)\n const canSearchByAssignee = useSelector(userCanSearchByAssignee)\n const { searchParams: savedSearchParams, searchWarning, showLocation, showMap, } = useSelector(burnRequestSearchDataSelector)\n const [ state, dispatch, ] = React.useReducer(searchFormReducer, {\n searchParams : savedSearchParams,\n datesValid : { ...initialState.datesValid, },\n }, initState)\n const { searchParams, datesValid, } = state\n const reduxDispatch = useDispatch()\n const [ dispatchInputChange, onChange, onSelect, ] = useInputChange(dispatch)\n const onReset = React.useCallback(() => { dispatch({ type: 'RESET_PARAMS', }) }, [])\n const [ onToggleMap, toggleLocation, onResetClick, ] = useRequestSearchActions(reduxDispatch, onReset)\n const onRequestDateClick = useSearchDateClick(dispatchInputChange, 'BurnRequestStartDate', 'BurnRequestEndDate')\n const onIgnitionDateClick = useSearchDateClick(dispatchInputChange, 'PlannedIgnitionStartDate', 'PlannedIgnitionEndDate')\n\n const onAutoComplete = useCallback(e => {\n const { name, id, value, } = e.target\n dispatchInputChange({ [name]: value, [`${name}Id`]: id, })\n }, [ dispatchInputChange, ])\n\n const [ regionAutoChange, ] = useAutoComplete('Region', onAutoComplete)\n\n const [ countyAutoChange, ] = useAutoComplete('County', onAutoComplete)\n\n const [ assignedStaffChange, ] = useAutoComplete('AssignedTo', onAutoComplete)\n\n // hook to request lookup data on mount\n useSearchLookupsFetch(reduxDispatch, canSearchByAssignee)\n\n const dispatchValidChanges = React.useCallback((values) => {\n dispatch({ type: 'SET_DATE_VALID', payload: values, })\n }, [])\n\n /**\n * Search button handler, update AJAX data object with new values \n */\n const onSearchClick = React.useCallback(() => {\n try {\n reduxDispatch(AppActions.showLoading())\n const { Region, RegionId, County, CountyId, } = searchParams\n const { BurnRequestDateValid, PlannedIgnitionDateValid, } = datesValid\n if (!!Region && !Number.isInteger(RegionId)) {\n reduxDispatch(ApiActions.failure('Invalid Region value. Please check your spelling and select a matching Region.'))\n reduxDispatch(AppActions.hideLoading())\n return\n }\n if (!!County && !Number.isInteger(CountyId)) {\n reduxDispatch(ApiActions.failure('Invalid County value. Please check your spelling and select a matching County.'))\n reduxDispatch(AppActions.hideLoading())\n return\n }\n if (!BurnRequestDateValid) {\n reduxDispatch(ApiActions.failure('Invalid Request Date Range value. Please check that your entries are formatted correctly.'))\n reduxDispatch(AppActions.hideLoading())\n return\n }\n if (!PlannedIgnitionDateValid) {\n reduxDispatch(ApiActions.failure('Invalid Planned Ignition Date Range value. Please check that your entries are formatted correctly.'))\n reduxDispatch(AppActions.hideLoading())\n return\n }\n reduxDispatch(BurnRequestSearchActions.searchBurnRequests(searchParams))\n } catch (err) {\n console.error('An error ocurred: ', err)\n }\n }, [ reduxDispatch, searchParams, datesValid, ])\n\n const handleKeyPress = useEnterPressHandler(onSearchClick)\n\n const dateRangeValidChange = React.useCallback((rangeName, isValid) => {\n if ((isValid === true) || ((isValid === false) && !!rangeName)) {\n const oldValid = datesValid[rangeName + 'Valid']\n if (oldValid !== isValid){\n let nextState = {}\n nextState[rangeName + 'Valid'] = isValid\n dispatchValidChanges(nextState)\n }\n }\n }, [ dispatchValidChanges, datesValid, ])\n\n return (\n \n \n \n \n \n Use the Burn Request ID to find Burn Requests that are submitted or in review.}\n />\n \n \n \n \n \n \n \n {\n isAuthenticated && <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n
    \n \n \n \n \n
    \n \n \n \n \n \n
    \n \n \n \n \n \n \n \n {\n canSearchByAssignee &&\n \n \n \n }\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {searchWarning}\n \n \n \n \n \n \n
    \n
    \n )\n}\n\nBurnRequestSearchForm.propTypes = {\n isAuthenticated: bool,\n}\n\nexport default React.memo(BurnRequestSearchForm)\n","import React from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Button, } from 'reactstrap'\r\nimport { func, bool, string, } from 'prop-types'\r\n\r\nimport BurnRequestSearchActions from '../redux/BurnRequestSearchRedux'\r\n\r\n\r\nconst ExportRequests = props => {\r\n const isDownloading = useSelector(state => state.BurnRequestSearch.isDownloadingExport)\r\n const dispatch = useDispatch()\r\n \r\n const onClick = React.useCallback(() => {\r\n dispatch(BurnRequestSearchActions.downloadRequestsExport())\r\n }, [ dispatch, ])\r\n\r\n return \r\n {props.buttonText}\r\n \r\n}\r\n\r\nExportRequests.propTypes = {\r\n color : string,\r\n buttonText : string,\r\n onClick : func,\r\n readOnly : bool,\r\n}\r\n\r\nExportRequests.defaultProps = {\r\n color : 'dark',\r\n buttonText : 'Export All Requests',\r\n onClick : () => {},\r\n readOnly : false,\r\n}\r\n\r\nexport default ExportRequests","// Libraries\r\nimport React, { useEffect, } from 'react'\r\nimport { Container, Row,Col, } from 'reactstrap'\r\nimport { array, func, bool, } from 'prop-types'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\n\r\n// Reducers\r\nimport AppActions from '../redux/AppRedux'\r\nimport RequestSearchActions from '../redux/BurnRequestSearchRedux'\r\n\r\n// Selectors\r\nimport { burnRequestsSelector, burnRequestsOfflineSelector, } from '../selectors/burnRequestSelectors'\r\n\r\n// Components\r\nimport BurnRequestTable from '../components/Search/BurnRequestTable'\r\nimport BurnRequestSearchForm from '../components/Search/BurnRequestSearchForm'\r\nimport ExportRequests from '../components/ExportRequests'\r\n\r\n// Hooks\r\nimport { useOnlineSelector, } from '../hooks'\r\n\r\nconst LARGE_RESULT_CLEAR_MSG = 'Your search results were cleared because your search returned over '\r\n + '1,000 records which degrades the performance of the application. Please click the Search '\r\n + 'button to execute your search again.'\r\n\r\nconst BurnRequestSearchContainer = ({\r\n isAuthenticated,\r\n isAdmin,\r\n}) => {\r\n const reduxDispatch = useDispatch()\r\n const showMap = useSelector((state) => {\r\n if (state && state.BurnRequestSearch) {\r\n return state.BurnRequestSearch.showMap\r\n }\r\n return false\r\n })\r\n const online = useOnlineSelector()\r\n const burnRequests = useSelector((state) => {\r\n if (online) {\r\n return burnRequestsSelector(state)\r\n } else {\r\n burnRequestsOfflineSelector(state)\r\n }\r\n })\r\n\r\n\r\n useEffect(() => {\r\n reduxDispatch(AppActions.setPageTitle('Burn Request Search'))\r\n reduxDispatch(RequestSearchActions.setDownloadingRequestsExport(false))\r\n return () => {\r\n if (online && burnRequests && burnRequests.length > 1000) {\r\n reduxDispatch(RequestSearchActions.resetRequestResults(LARGE_RESULT_CLEAR_MSG))\r\n } \r\n reduxDispatch(RequestSearchActions.setDownloadingRequestsExport(false))\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return (\r\n \r\n
    \r\n

    Search Burn Requests

    \r\n { isAdmin && }\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nBurnRequestSearchContainer.propTypes = {\r\n SetPageTitle : func,\r\n BurnRequests : array,\r\n ShowMap : bool,\r\n isAuthenticated : bool,\r\n online : bool,\r\n isAdmin : bool,\r\n ClearSearchResults : func,\r\n}\r\n\r\nexport default BurnRequestSearchContainer\r\n","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { func, object, array, bool, number, string, PropTypes, } from 'prop-types'\r\nimport { Link, } from 'react-router-dom'\r\nimport { isEmpty, } from 'lodash'\r\nimport {\r\n Container,\r\n Row,\r\n Col,\r\n Button,\r\n Modal,\r\n ModalHeader,\r\n ModalBody,\r\n Badge,\r\n} from 'reactstrap'\r\n\r\n// Reducers\r\nimport AppActions from '../redux/AppRedux'\r\nimport UiActions from '../redux/UiRedux'\r\nimport BurnPermitFormActions from '../redux/BurnPermitFormRedux'\r\n\r\n// Components\r\nimport {\r\n BurnPermitStatusSection,\r\n BurnPermitAreaSection,\r\n ApplicantInfoSection,\r\n BurnPermitBurnLocationSection,\r\n BurnPermitSiteSection,\r\n BurnPermitPileGroupsSection,\r\n BurnPermitFuelsSection,\r\n BurnPermitSignatureSection,\r\n ForestHealthExemptionSection,\r\n PermitFailedToLoad,\r\n ApplicationDocuments,\r\n Tonnage,\r\n Nav,\r\n StatusHeader,\r\n} from '../components/PermitSections'\r\nimport ConfirmationModal from '../components/ConfirmationModal'\r\nimport {\r\n ApplicationNextSteps,\r\n PermitNextSteps,\r\n DeleteApplication,\r\n CopyApplication,\r\n} from '../components/Modals'\r\nimport withRouter from '../components/withRouter'\r\n\r\n// Selectors\r\nimport { permitIdAndSectionIdsByPermitIdSelector, permitStatus, } from '../selectors/selectors'\r\nimport {\r\n permitApplicationIsSigned,\r\n permitEstimatedFee,\r\n permitTotalPermitTonnage,\r\n permitIsSuspendedSelector,\r\n permitIsRevokedSelector,\r\n permitApplicationStatus,\r\n activePermitIsLegacy,\r\n permitIsInUGA,\r\n permitIsExpiredSelector,\r\n permitIsForForestHealth,\r\n activeBurnPermitStateSelector,\r\n} from '../selectors/burnPermitSelectors'\r\nimport { userSelector, } from '../selectors/userSelectors'\r\nimport {\r\n userCanEditLegacyPermitApplInfo,\r\n userCanReviewFHExemption,\r\n userCanEditLocationPastSubmission,\r\n} from '../selectors/burnPermitPermissionSelectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../utilities/stopEvent'\r\nimport { authPropsDefaults, authPropsTypes, } from '../utilities/props'\r\n\r\n\r\nclass BurnPermitFormContainer extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n this.renderSteps = this.renderSteps.bind(this)\r\n \r\n const { SetPageTitle, GetBurnPermitDetail, CloseModal, params, } = this.props\r\n // Close all modals to start\r\n CloseModal()\r\n GetBurnPermitDetail(params.BurnPermitId)\r\n\r\n SetPageTitle(`Burn Permit Application ${params.BurnPermitId}`)\r\n }\r\n\r\n static propTypes = {\r\n // from withRouter HOC\r\n params : object,\r\n navigate : func,\r\n\r\n GetBurnPermit : func,\r\n GetBurnPermitDetail : func,\r\n SetPageTitle : func,\r\n SetActiveStep : func,\r\n ValidatePermit : func,\r\n ActiveBurnPermit : func,\r\n DeleteApplication : func,\r\n CopyApplication : func,\r\n ToggleApplicationSummary : func,\r\n OpenModal : func,\r\n CloseModal : func,\r\n activeBurnPermit : object,\r\n activeStep : number,\r\n applicationStatus : object,\r\n permitStatus : object,\r\n permitFailedToLoad : bool,\r\n isRevoked : bool,\r\n isSuspended : bool,\r\n isExpired : bool,\r\n isIssued : bool,\r\n readOnly : bool,\r\n isSigned : bool,\r\n Documents : array,\r\n TotalPermitTonnage : PropTypes.oneOfType([ number, string, ]),\r\n EstimatedFee : PropTypes.oneOfType([ number, string, ]),\r\n OpenModalKey : string,\r\n online : bool,\r\n isInUGA : bool,\r\n ShowForestHealth : bool,\r\n canEditLocAfterSub : bool,\r\n showUnlockButton : bool,\r\n applicationSummaryIsShowing : bool,\r\n // from parent\r\n ...authPropsTypes,\r\n }\r\n\r\n static defaultProps = {\r\n readOnly : false,\r\n applicationStatus : null,\r\n isSigned : false,\r\n applicationSummaryIsShowing : false,\r\n ...authPropsDefaults,\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { activeBurnPermit, SetPageTitle, } = this.props\r\n\r\n // This can happen if a user creates the application while offline,\r\n // then regains an internet connection while still on the application page\r\n if (!prevProps.online && this.props.online) {\r\n let prevPermitId, currPermitId\r\n if (!isEmpty(prevProps.activeBurnPermit)) {\r\n prevPermitId = prevProps.activeBurnPermit.BurnPermitId\r\n }\r\n if (!isEmpty(activeBurnPermit)) {\r\n currPermitId = activeBurnPermit.BurnPermitId\r\n }\r\n if (prevPermitId !== currPermitId && Number.isInteger(currPermitId)) {\r\n SetPageTitle(`Burn Permit Application ${activeBurnPermit.BurnPermitId}`)\r\n this.props.navigate(`/permits/${activeBurnPermit.BurnPermitId}`)\r\n return\r\n }\r\n }\r\n \r\n // This captures the scenario where a Burn Permit is copied and the user\r\n // uses the browser navigation to move forward/backward between the permits\r\n // Or when a user copies an application\r\n const { params, } = this.props\r\n if (prevProps.params.BurnPermitId !== params.BurnPermitId) {\r\n SetPageTitle(`Burn Permit Application ${params.BurnPermitId}`)\r\n this.props.GetBurnPermitDetail(params.BurnPermitId)\r\n return\r\n }\r\n \r\n if (!prevProps.showInvalidAppModal && this.props.showInvalidAppModal) {\r\n this.props.OpenModal(this.invalidApplicationModal)\r\n }\r\n }\r\n\r\n scrollToStep = () => {\r\n // make sure that it is visible in the step nav in case they are on mobile\r\n let btnNav = document.getElementsByClassName('btn-nav')\r\n if (!Array.isArray(btnNav)) {\r\n btnNav = []\r\n }\r\n const activeBtn = [ ...btnNav, ].filter(b => b.classList.contains('active'))[0]\r\n const container = document.getElementsByClassName('application-nav')[0]\r\n if (activeBtn && container && typeof container.scrollTo === 'function') {\r\n container.scrollTo(activeBtn.offsetLeft, 0)\r\n }\r\n }\r\n\r\n validatePermit = () => {\r\n if (this.props.online) {\r\n this.props.ValidatePermit(this.props.activeBurnPermit.BurnPermitId)\r\n }\r\n }\r\n\r\n reloadPermit = evt => {\r\n stopEvent(evt)\r\n if (this.props.online) {\r\n this.props.GetBurnPermitDetail(this.props.activeBurnPermit.BurnPermitId, null, true)\r\n }\r\n }\r\n\r\n instructionsModalKey = 'APPLICATION_NEXT_STEPS'\r\n invalidApplicationModal = 'INVALID_APPLICATION'\r\n unlockApplicationModalKey = 'UNLOCK_PERMIT_APPLICATION'\r\n deleteAppModalKey = 'DELETE_PERMIT_APPLICATION'\r\n copyAppModalKey = 'COPY_PERMIT_APPLICATION'\r\n\r\n openModal = evt => {\r\n stopEvent(evt)\r\n const dataset = evt.target.nodeName === 'SPAN'\r\n ? evt.target.parentNode.dataset\r\n : evt.target.dataset\r\n const { modalkey, } = dataset\r\n this.props.OpenModal(modalkey)\r\n }\r\n\r\n renderSteps () {\r\n \r\n const {\r\n activeBurnPermit,\r\n User,\r\n isSigned,\r\n isDenied,\r\n readOnly,\r\n isIssued,\r\n isVerifiedAgent,\r\n isDnr,\r\n ShowForestHealth,\r\n isInUGA,\r\n applicationStatus,\r\n canEditLocAfterSub,\r\n activeStep,\r\n } = this.props\r\n\r\n // To dynamically render Steps, such as the Forest Health Step\r\n // break up the component from its props so it is not rendered when declaring the array\r\n // This makes it easier to add, remove, or reorder the Steps while maintaining\r\n // functionality for the next and previous controls as well as ensuring the Step\r\n // id ordering is correct\r\n const steps = [\r\n [\r\n BurnPermitAreaSection,\r\n {\r\n title : 'Burn Area',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n burnPermitAreaId : activeBurnPermit.BurnPermitAreaId,\r\n readOnly : readOnly,\r\n },\r\n ],\r\n [\r\n ApplicantInfoSection,\r\n {\r\n title : 'Applicant',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n readOnly : this.props.isLegacy && this.props.canEditLegacyAppl ? false : readOnly,\r\n userPersonId : User.personId,\r\n isDnr : isDnr,\r\n isAgent : (this.props.isAgent && isVerifiedAgent) || (this.props.isGovAgent && isVerifiedAgent),\r\n },\r\n ],\r\n [\r\n BurnPermitBurnLocationSection,\r\n {\r\n title : 'Burn Location',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n burnPermitLocationId : activeBurnPermit.BurnPermitLocationId,\r\n applicationStatus : applicationStatus ? applicationStatus.Status : '',\r\n // DNR users can edit the section until the Permit is Issued\r\n readOnly : !canEditLocAfterSub || isDenied ? readOnly : isIssued,\r\n isInUGA,\r\n },\r\n ],\r\n [\r\n BurnPermitSiteSection,\r\n {\r\n title : 'Burn Site',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n burnPermitSiteId : activeBurnPermit.BurnPermitSiteId,\r\n readOnly : readOnly,\r\n },\r\n ],\r\n [\r\n BurnPermitPileGroupsSection,\r\n {\r\n title : 'Pile Groups',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n readOnly : readOnly,\r\n applicationStatus : applicationStatus ? applicationStatus.Status : '',\r\n },\r\n ],\r\n [\r\n BurnPermitFuelsSection,\r\n {\r\n title : 'Fuels',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n burnPermitFuelId : activeBurnPermit.BurnPermitFuelId,\r\n readOnly : readOnly,\r\n },\r\n ],\r\n [\r\n ApplicationDocuments,\r\n {\r\n title : 'Documents',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n },\r\n ],\r\n [\r\n BurnPermitSignatureSection,\r\n {\r\n title : 'Signature',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n readOnly : readOnly,\r\n },\r\n ],\r\n ]\r\n\r\n // If the applicant set the burn reason to Forest Health\r\n if (ShowForestHealth) {\r\n // The Forest Health section needs to be rendered in order to capture the exempt data\r\n // and provide the forest health approval interface for DNR users\r\n const forestHealthSection = [\r\n ForestHealthExemptionSection,\r\n {\r\n title : 'Forest Health Exemption',\r\n burnPermitId : activeBurnPermit.BurnPermitId,\r\n readOnly : isSigned,\r\n showSaveControls : this.props.canReviewFHExemption ? true : !isSigned,\r\n applicationStatus : applicationStatus ? applicationStatus.Status : '',\r\n },\r\n ]\r\n // Insert it in to the array after the burn site section\r\n steps.splice(steps.findIndex(s => s[1].title === 'Burn Site') + 1, 0, forestHealthSection)\r\n }\r\n\r\n this.scrollToStep()\r\n\r\n // Map the steps to dynamically set the sectionId and key for each component\r\n const labels = steps.map(s => s[1].title).filter(t => !!t)\r\n return <>\r\n {\r\n this.props.SetActiveStep(stepIdx + 1)\r\n }}\r\n />\r\n {\r\n steps.map((s, idx) => {\r\n const Comp = s[0]\r\n const props = s[1]\r\n props.sectionId = idx + 1\r\n return \r\n })\r\n }\r\n \r\n }\r\n\r\n render () {\r\n const { activeBurnPermit, permitFailedToLoad, } = this.props\r\n\r\n const burnPermitIsReadyToLoad = !isEmpty(activeBurnPermit)\r\n\r\n if (burnPermitIsReadyToLoad === false && permitFailedToLoad === false) {\r\n return \r\n \r\n \r\n

    Loading Application...

    \r\n \r\n
    \r\n
    \r\n }\r\n else if (permitFailedToLoad === true) {\r\n return \r\n }\r\n \r\n const {\r\n isDnr,\r\n isRevoked,\r\n isExpired,\r\n isSuspended,\r\n applicationStatus,\r\n isIssued,\r\n online,\r\n isInUGA,\r\n ShowForestHealth,\r\n showUnlockButton,\r\n } = this.props\r\n\r\n let headerText = `Burn Permit Application ${ activeBurnPermit ? activeBurnPermit.BurnPermitId : ''}`\r\n let newRequestUrl = ''\r\n if (isIssued) {\r\n headerText = `Burn Permit ${activeBurnPermit.BurnPermitNumber}`\r\n newRequestUrl = `/burn-requests/new?burnPermitNumber=${activeBurnPermit.BurnPermitNumber}`\r\n }\r\n\r\n const statusProps = {\r\n isSuspended,\r\n isRevoked,\r\n isExpired,\r\n enableSummary : false,\r\n appStatus : applicationStatus,\r\n enableToggler : !!applicationStatus,\r\n toggleApplicationSummary : this.props.ToggleApplicationSummary,\r\n applicationSummaryIsShowing : this.props.applicationSummaryIsShowing,\r\n }\r\n \r\n return \r\n \r\n \r\n

    \r\n { headerText }\r\n

    \r\n {\r\n isInUGA &&\r\n \r\n \r\n \r\n }\r\n {\r\n ShowForestHealth &&\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n {\r\n applicationStatus && <>\r\n \r\n \r\n }\r\n {\r\n showUnlockButton && <>\r\n \r\n \r\n Unlock\r\n \r\n \r\n

    Are you sure you wish to unlock this Burn Permit Application to edit it?

    \r\n

    This action will permanently delete your DocuSign signature and is irreversible.

    \r\n }\r\n submitAction={this.props.UnlockApplication}\r\n submitArgs={[ this.props.activeBurnPermit.BurnPermitId, ]}\r\n />\r\n \r\n \r\n Invalid Application\r\n \r\n \r\n

    \r\n Your application has one or more invalid sections.\r\n You must click the Unlock button at the bottom of the page then update each invalid section.\r\n

    \r\n

    \r\n Once all sections are valid, you may then sign the application and create an order with it.\r\n

    \r\n
    \r\n
    \r\n \r\n }\r\n {\r\n applicationStatus && applicationStatus.Status === 'Pending' && <>\r\n \r\n \r\n }\r\n {\r\n !isIssued && <>\r\n \r\n \r\n Instructions\r\n \r\n \r\n }\r\n { (isIssued && !isExpired && !isRevoked) && newRequestUrl && New Burn Request }\r\n \r\n \r\n \r\n \r\n
    \r\n {\r\n this.props.applicationSummaryIsShowing\r\n ? \r\n : this.renderSteps()\r\n }\r\n
    \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n \r\n const {\r\n activeBurnPermitId,\r\n permitFailedToLoad,\r\n activeStep,\r\n completedSteps,\r\n invalidSteps,\r\n applicationSummaryIsShowing,\r\n } = activeBurnPermitStateSelector(state)\r\n\r\n let isIssued = false\r\n let isDenied = false\r\n let readOnly = true\r\n let canValidate = false\r\n const isSigned = permitApplicationIsSigned(state, activeBurnPermitId)\r\n\r\n let status = permitStatus(state, activeBurnPermitId)\r\n if (!status) {\r\n status = permitApplicationStatus(state, activeBurnPermitId)\r\n }\r\n else {\r\n isIssued = true\r\n }\r\n\r\n let isPending = false\r\n if (status) {\r\n isDenied = status.Status === 'Denied'\r\n isPending = status.Status === 'Pending'\r\n if (isPending || status.Status === 'Info Required') {\r\n readOnly = isSigned\r\n canValidate = true\r\n }\r\n }\r\n\r\n const showInvalidAppModal = status && isPending && isSigned && invalidSteps.length > 0\r\n\r\n const User = userSelector(state)\r\n const { online, } = state.offline\r\n\r\n return {\r\n online,\r\n isIssued,\r\n isDenied,\r\n readOnly,\r\n isSigned,\r\n User,\r\n activeStep,\r\n completedSteps,\r\n invalidSteps,\r\n applicationSummaryIsShowing,\r\n permitFailedToLoad,\r\n showUnlockButton : status && isPending && isSigned,\r\n isInUGA : permitIsInUGA(state, activeBurnPermitId),\r\n applicationStatus : status,\r\n activeBurnPermit : permitIdAndSectionIdsByPermitIdSelector(state, activeBurnPermitId),\r\n EstimatedFee : permitEstimatedFee(state),\r\n TotalPermitTonnage : permitTotalPermitTonnage(state),\r\n isSuspended : permitIsSuspendedSelector(state),\r\n isRevoked : permitIsRevokedSelector(state, activeBurnPermitId),\r\n isExpired : permitIsExpiredSelector(state),\r\n OpenModalKey : state.ui.Modal.modalKey,\r\n isLegacy : activePermitIsLegacy(state),\r\n ShowForestHealth : permitIsForForestHealth(state, activeBurnPermitId),\r\n canEditLegacyAppl : userCanEditLegacyPermitApplInfo(state),\r\n canReviewFHExemption : userCanReviewFHExemption(state),\r\n canEditLocAfterSub : userCanEditLocationPastSubmission(state),\r\n canValidate,\r\n showInvalidAppModal,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n GetBurnPermit : BurnPermitFormActions.getBurnPermit,\r\n GetBurnPermitDetail : BurnPermitFormActions.getBurnPermitDetail,\r\n SetActiveStep : BurnPermitFormActions.setActiveStep,\r\n ActiveBurnPermit : BurnPermitFormActions.activeBurnPermit,\r\n ValidatePermit : BurnPermitFormActions.validatePermit,\r\n DeleteApplication : BurnPermitFormActions.deleteApplication,\r\n UnlockApplication : BurnPermitFormActions.unlockApplication,\r\n CopyApplication : BurnPermitFormActions.copyApplication,\r\n ToggleApplicationSummary : BurnPermitFormActions.toggleApplicationSummary,\r\n OpenModal : UiActions.openModal,\r\n CloseModal : UiActions.closeModal,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(BurnPermitFormContainer))\r\n","import React, { useEffect, useState, } from 'react'\nimport { Navigate, useLocation, } from 'react-router-dom'\nimport { connect, useSelector, } from 'react-redux'\nimport { Container, Row, Col, Card, CardHeader, CardBody, NavLink, } from 'reactstrap'\nimport { func, object, } from 'prop-types'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport ApiActions from '../redux/ApiRedux'\nimport UserTypes from '../redux/UserRedux'\n\n// Selectors\nimport { returnUrlSelector, } from '../selectors/appSelectors'\n\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_SAW_LOGIN_URL, REACT_APP_SERVER, } = process.env\nconst ADFS_LOGIN_URL = `${REACT_APP_SERVER}Account/ADFS`\n\n\nconst LoginContainer = props => {\n const [ redirectUrl, setRedirect, ] = useState('')\n\n const returnUrl = useSelector(returnUrlSelector)\n const location = useLocation()\n const { search, } = location\n\n useEffect(() => {\n props.SetPageTitle('Login')\n\n const params = new URLSearchParams(search)\n const token = params.get('token')\n\n if (token) {\n props.LoginReceived(token)\n if (returnUrl) {\n setRedirect(returnUrl)\n }\n else {\n setRedirect('/Profile')\n }\n }\n\n const error = params.get('error')\n if (error) {\n props.Failure(error)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n if (redirectUrl) {\n return \n }\n\n return \n

    Login

    \n \n \n \n SAW Login\n \n

    Are you a Landowner, Agent, or an employee of another municipality?

    \n

    Use Secure Access Washington (SAW) to log in. Then you will be able to create and manage your Burn Permits, Requests, and Post Burn data.

    \n \n SAW Login\n \n \n
    \n
    \n \n \n \n WA State Employee Login\n \n

    Are you a Washington State employee?

    \n

    Use the link below to log in with your state issued active directory account. Then you will be able to review and manage Burn Permits, Requests, and Post Burn data.

    \n \n WA State Employee Login\n \n \n
    \n
    \n \n
    \n
    \n}\n\nLoginContainer.propTypes = {\n location : object,\n SetReturnUrl : func,\n LoginReceived : func,\n SetPageTitle : func,\n Failure : func,\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n LoginReceived : UserTypes.loginReceived,\n Failure : ApiActions.failure,\n SetReturnUrl : AppActions.setReturnUrl,\n}\n\nexport default connect(null, mapDispatchToProps)(LoginContainer)","// Libraries\r\nimport React, { useState, useCallback, } from 'react'\r\nimport { useSelector, } from 'react-redux'\r\nimport { Button, Input, Label, } from 'reactstrap'\r\n\r\n// Components\r\nimport ExternalLink from '../ExternalLink'\r\n\r\n// Selectors\r\nimport { getUserToken, } from '../../selectors/userSelectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n// Constants\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER, } = process.env\r\n\r\n\r\nconst ApiToken = () => {\r\n // State\r\n const [ copiedMessage, setCopiedMessage, ] = useState('')\r\n\r\n // Selectors\r\n const token = useSelector(getUserToken)\r\n\r\n // UI Callbacks\r\n const copyToken = useCallback(async e => {\r\n stopEvent(e)\r\n await navigator.clipboard.writeText(token)\r\n setCopiedMessage('Token copied!')\r\n }, [ token, ])\r\n\r\n return <>\r\n \r\n \r\n \r\n Copy to clipboard\r\n \r\n {\r\n copiedMessage &&

    \r\n {copiedMessage}\r\n

    \r\n }\r\n \r\n \r\n}\r\n\r\nexport default React.memo(ApiToken)","// Libraries\r\nimport React from 'react'\r\nimport { Col, FormGroup, Label, Button, } from 'reactstrap'\r\nimport { Formik, Field, Form, } from 'formik'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport * as Yup from 'yup'\r\n\r\n// Actions\r\nimport AppActions from '../../redux/AppRedux'\r\n\r\n// Components\r\nimport { PopoverButton, ValidatingField, } from '../FormControls'\r\n\r\n// Selectors\r\nimport { appStateSelector, } from '../../selectors/appSelectors'\r\n\r\nconst valSchema = Yup.object().shape({\r\n HistoryLength: Yup.number()\r\n .typeError('History length must be a number')\r\n .min(1)\r\n .required('Please enter a history length'),\r\n})\r\n\r\nfunction HistorySettingForm () {\r\n\r\n // Hooks\r\n const dispatch = useDispatch()\r\n\r\n // Selectors\r\n const { HistoryLength, } = useSelector(appStateSelector)\r\n\r\n // UI Callbacks\r\n const submit = React.useCallback(({ HistoryLength: newHistLen, }) => {\r\n dispatch(AppActions.setHistoryLength(newHistLen))\r\n }, [ dispatch, ])\r\n\r\n const initialValues = { HistoryLength, }\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Set History Length\r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default React.memo(HistorySettingForm)","import React, { useCallback, } from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { ButtonGroup, Label, } from 'reactstrap'\r\n\r\n// Actions\r\nimport UserActions from '../../redux/UserRedux'\r\n\r\n// Components\r\nimport { ButtonGroupButton, } from '../FormControls'\r\n\r\n// Selectors\r\nimport { userNetworkNotifEnabled, } from '../../selectors/userSelectors'\r\n\r\n// Utilities\r\nimport stopEvent from '../../utilities/stopEvent'\r\n\r\n\r\nconst NetworkNotifications = () => {\r\n\r\n // Hooks\r\n const dispatch = useDispatch()\r\n\r\n // Selectors\r\n const NetworkNotificationsEnabled = useSelector(userNetworkNotifEnabled)\r\n\r\n // UI Callbacks\r\n const toggleNetworkNotifications = useCallback(e => {\r\n stopEvent(e)\r\n const { classList, } = e.target\r\n if (!classList.contains('active')) {\r\n dispatch(UserActions.toggleNetworkNotifications())\r\n }\r\n }, [ dispatch, ])\r\n\r\n return <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n}\r\n\r\nexport default React.memo(NetworkNotifications)","// Libraries\r\nimport React from 'react'\r\nimport { array, } from 'prop-types'\r\nimport { Label, ListGroup, ListGroupItem, } from 'reactstrap'\r\n\r\n\r\nconst UserGroups = (props) => {\r\n const { userGroups, } = props\r\n if (!userGroups) {\r\n return null\r\n }\r\n return <>\r\n \r\n \r\n { userGroups.map(g => {g}) }\r\n \r\n \r\n}\r\n\r\nUserGroups.defaultProps = {\r\n userGroups: [],\r\n}\r\n\r\nUserGroups.propTypes = {\r\n userGroups: array,\r\n}\r\n\r\nexport default React.memo(UserGroups)","// Libraries\r\nimport React, { useCallback, useState, } from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { Label, Nav, NavItem, NavLink, TabContent, TabPane, } from 'reactstrap'\r\n\r\n// Actions\r\nimport AppActions from '../../redux/AppRedux'\r\nimport MapActions from '../../redux/MapRedux'\r\n\r\n// Components\r\nimport { CheckBoxes, } from '../FormControls'\r\n\r\n// Selectors\r\nimport { layerConfigsSelector, mapLayerIdsSelector, } from '../../selectors/mapSelectors'\r\n\r\n\r\nconst MapLayers = () => {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const layerConfigs = useSelector(layerConfigsSelector)\r\n const mapLayerIds = useSelector(mapLayerIdsSelector)\r\n\r\n const [ activeTab, setActiveTab, ] = useState(layerConfigs[0].name)\r\n\r\n const mapLayerTabClick = useCallback(e => {\r\n const { configname, } = e.target.dataset\r\n // If we're already on this tab, don't fire off the action\r\n // which will trigger a re-render\r\n if (configname === activeTab) {\r\n return\r\n }\r\n setActiveTab(configname)\r\n }, [ setActiveTab, activeTab, ])\r\n\r\n const getClassName = useCallback(configname => {\r\n if (activeTab === configname) {\r\n return 'active'\r\n }\r\n return ''\r\n }, [ activeTab, ])\r\n\r\n const checkboxData = useCallback(config => {\r\n const data = mapLayerIds\r\n .filter(l =>\r\n config.unavailableLayers.includes(l.Value) === false\r\n )\r\n // Create a copy of the items so any mutatation do not leak \r\n // across calls to this callback\r\n .map(l => ({ ...l, }))\r\n if (Array.isArray(config.requiredLayers)) {\r\n return data.map(l => {\r\n l.readOnly = config.requiredLayers.includes(l.Value)\r\n return l\r\n })\r\n }\r\n return data\r\n }, [ mapLayerIds, ])\r\n\r\n const getCheckedData = useCallback(config => {\r\n const checkedData = checkboxData(config)\r\n .filter(l => \r\n config.hiddenLayers.includes(l.Value) === false\r\n )\r\n .map(l => l.Value)\r\n return checkedData\r\n }, [ checkboxData, ])\r\n\r\n const onCheckboxChange = useCallback(e => {\r\n dispatch(AppActions.hideSuccess())\r\n const { value, checked, } = e.target\r\n if (value === 'all') {\r\n const config = layerConfigs.filter(c => c.name === activeTab)[0]\r\n const layers = checkboxData(config)\r\n .filter(d => d.readOnly !== true)\r\n .map(d => d.Value)\r\n dispatch(MapActions.toggleAllConfigLayerVisibility(activeTab, layers, checked))\r\n }\r\n else {\r\n dispatch(MapActions.setConfigLayerVisibility(activeTab, value, checked))\r\n }\r\n setTimeout(() => dispatch(AppActions.showSuccess()), 100)\r\n },[ dispatch, activeTab, checkboxData, layerConfigs, ])\r\n\r\n return <>\r\n \r\n \r\n \r\n {\r\n layerConfigs.map((config, idx) => {\r\n return \r\n \r\n * \r\n Items that are checked and read only are required by the application to provide added functionality\r\n \r\n \r\n \r\n })\r\n }\r\n \r\n \r\n}\r\n\r\nexport default React.memo(MapLayers)\r\n","// Libraries\r\nimport React, { useState, useEffect, useCallback, useMemo, } from 'react'\r\nimport { useDispatch, useSelector, } from 'react-redux'\r\nimport { useNavigate, } from 'react-router-dom'\r\nimport {\r\n Card,\r\n CardBody,\r\n CardHeader,\r\n Col,\r\n Collapse,\r\n Container,\r\n FormGroup,\r\n Input,\r\n Label,\r\n Row,\r\n} from 'reactstrap'\r\nimport { bool, } from 'prop-types'\r\n\r\n// Actions\r\nimport AppActions from '../redux/AppRedux'\r\nimport PersonActions from '../redux/PersonRedux'\r\n\r\n// Selectors\r\nimport { appStateSelector, } from '../selectors/appSelectors'\r\nimport { currentUserGroupsSelector, userSelector, } from '../selectors/userSelectors'\r\nimport {\r\n personSelector,\r\n personPhoneSelector,\r\n personAddressesSelector,\r\n personAlertPrefXrefSelector,\r\n personAgencyXrefSelector,\r\n personRegionXrefSelector,\r\n personEmailSelector,\r\n getUnsubmittedRequests,\r\n} from '../selectors/personSelectors'\r\n\r\n// Components\r\nimport { PersonForm, } from '../components/Forms'\r\nimport {\r\n ApiToken,\r\n HistorySettingForm,\r\n NetworkNotifications,\r\n ProfileStatus,\r\n UserGroups,\r\n} from '../components/Profile'\r\nimport BurnRequestNotices from '../components/Modals/BurnRequestNotices'\r\nimport MapLayers from '../components/Profile/MapLayers'\r\n\r\n// Utilities\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n\r\nconst ProfileContainer = (props) => {\r\n const { isLoadingUser, isAgent, } = props\r\n\r\n // Hooks\r\n const dispatch = useDispatch()\r\n const navigate = useNavigate()\r\n\r\n // Selectors\r\n const User = useSelector(userSelector)\r\n const userGroups = useSelector(currentUserGroupsSelector)\r\n const personId = User ? User.personId : null\r\n\r\n const person = useSelector(state => personSelector(state, personId))\r\n const addresses = useSelector(state => personAddressesSelector(state, personId))\r\n const phones = useSelector(state => personPhoneSelector(state, personId))\r\n const alertPrefs = useSelector(state => personAlertPrefXrefSelector(state, personId))\r\n const agency = useSelector(state => personAgencyXrefSelector(state, personId))\r\n const region = useSelector(state => personRegionXrefSelector(state, personId))\r\n const email = useSelector(state => personEmailSelector(state, personId))\r\n\r\n const { returnUrl, } = useSelector(appStateSelector)\r\n const burnRequestNotices = useSelector(getUnsubmittedRequests)\r\n\r\n // State\r\n const [ userInfoIsOpen, setUserInfoIsOpen, ] = useState(true)\r\n const [ userProfileIsOpen, setUserProfileIsOpen, ] = useState(true)\r\n const [ requestModalDismissed, setRequestModalDismissed, ] = useState(false)\r\n\r\n // OnMount\r\n useEffect(() => {\r\n const shouldFetch = !isLoadingUser && User && Number.isInteger(User.personId) && (User.personId > 0)\r\n if (shouldFetch) { \r\n dispatch(PersonActions.getPerson(User.personId))\r\n dispatch(PersonActions.getUnsubmittedRequests(User.personId))\r\n }\r\n dispatch(AppActions.setPageTitle('Profile'))\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n // DidUpdate\r\n useEffect(() => {\r\n if (isLoadingUser === true && returnUrl) {\r\n dispatch(AppActions.setReturnUrl(''))\r\n navigate(returnUrl)\r\n }\r\n }, [ dispatch, navigate, isLoadingUser, returnUrl, ])\r\n\r\n // UI Callbacks\r\n const closeBurnReqNotices = useCallback(e => {\r\n stopEvent(e)\r\n setRequestModalDismissed(true)\r\n }, [])\r\n\r\n const burnReqNoticesOpen = useMemo(() => {\r\n return !requestModalDismissed && burnRequestNotices.length > 0\r\n }, [ requestModalDismissed, burnRequestNotices, ])\r\n\r\n return \r\n

    Profile

    \r\n \r\n \r\n {\r\n personId && \r\n \r\n \r\n \r\n Your Profile (ID: {personId})\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n Your User Information\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n}\r\n\r\nProfileContainer.defaultProps = {\r\n isLoadingUser : false,\r\n isAgent : false,\r\n}\r\n\r\nProfileContainer.propTypes = {\r\n isLoadingUser : bool,\r\n isAgent : bool,\r\n}\r\n\r\nexport default React.memo(ProfileContainer)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Container, } from 'reactstrap'\nimport { func, array, } from 'prop-types'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport ApiActions from '../redux/ApiRedux'\n\n// Components\nimport DataTable from '../components/DataTable'\n\n// Models\nimport ForestType from '../models/ForestType'\n\n// Selectors\nimport { forestTypesSelector, } from '../selectors/selectors'\n\n\nexport class ForestFuelTypesContainer extends React.Component {\n static propTypes = {\n forestTypes : array,\n columns : array,\n SetPageTitle : func,\n GetLookupData : func,\n }\n\n columns = ForestType.getDataTablesColumns()\n\n componentDidMount () {\n const { SetPageTitle, GetLookupData, } = this.props\n\n SetPageTitle('Forest Type/Fuels Descriptions')\n GetLookupData('ForestType')\n }\n\n render () {\n return (\n \n \n \n ) \n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n forestTypes: forestTypesSelector(state),\n }\n}\n\nconst mapDispatchToProps = {\n GetLookupData : ApiActions.lookupData,\n SetPageTitle : AppActions.setPageTitle,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ForestFuelTypesContainer)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { Container, Row, Col, Card, CardBody, CardHeader, Button, } from 'reactstrap'\r\nimport { object, bool, func, number, string, PropTypes, } from 'prop-types'\r\nimport { render as ReactDOMRender, } from 'react-dom'\r\nimport { isEqual, } from 'lodash'\r\n\r\n// Reducers\r\nimport UiActions from '../redux/UiRedux'\r\nimport AgencyActions from '../redux/AgencyRedux'\r\nimport ApiActions from '../redux/ApiRedux'\r\nimport AppActions from '../redux/AppRedux'\r\nimport MergeActions from '../redux/MergeRedux'\r\n\r\n// Selectors\r\nimport { \r\n agencySavedSelector,\r\n agencySavingSelector,\r\n currentAgencySelector,\r\n userCreatedAgency,\r\n} from '../selectors/agencySelectors'\r\nimport { userCanViewAgencyAuitData, } from '../selectors/permissionSelectors'\r\n\r\n// Components\r\nimport { PhoneForm, AgencyForm, EmailForm, AddressForm, } from '../components/Forms'\r\nimport ConfirmationModal from '../components/ConfirmationModal'\r\nimport DataTable from '../components/DataTable'\r\nimport withRouter from '../components/withRouter'\r\n\r\n// Utilities\r\nimport { renderCheckOrXIcon, } from '../utilities/columnHelpers'\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n// Models\r\nimport BurnPermitSearch from '../models/BurnPermitSearch'\r\nimport BurnRequestSearch from '../models/BurnRequestSearch'\r\n\r\n\r\nconst DELETE_AGENCY_MODAL_KEY = 'delete-agency'\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\nconst AGENCY_PEOPLE_URL = id => `${REACT_APP_SERVER_URL}Agencies/${id}/People`\r\n\r\n\r\nconst DATATABLE_COLS = [\r\n {\r\n title : 'Id',\r\n data : 'PersonId',\r\n orderable : true,\r\n searchable : false,\r\n target : [ 0, ],\r\n width : 15,\r\n }, \r\n {\r\n title : 'Verified',\r\n data : 'IsVerified',\r\n searchable : false,\r\n render : renderCheckOrXIcon,\r\n },\r\n {\r\n title : 'Type',\r\n data : 'PersonTypeName',\r\n },\r\n {\r\n title : 'First Name',\r\n data : 'PersonFirstName',\r\n },\r\n {\r\n title : 'Middle Name',\r\n data : 'PersonMiddleName',\r\n },\r\n {\r\n title : 'Last Name',\r\n data : 'PersonLastName',\r\n },\r\n]\r\n\r\nclass AgencyContainer extends React.Component {\r\n static propTypes = {\r\n // from withRouter HOC\r\n navigate : func,\r\n location : object,\r\n params : object,\r\n \r\n actions : object,\r\n agencyId : PropTypes.oneOfType([ string, number, ]),\r\n isNewAgency : bool,\r\n agency : object,\r\n address : object,\r\n phone : object,\r\n email : object,\r\n readOnly : bool,\r\n saved : object,\r\n saving : object,\r\n userCreatedAgency : bool,\r\n OpenModal : func,\r\n ResetAgencyId : func,\r\n CreateNewAgency : func,\r\n CreateAgency : func,\r\n CreateAgencyObject : func,\r\n DeleteAgency : func,\r\n UpdateAgency : func,\r\n UpdateAgencyObject : func,\r\n ClearAllSaveState : func,\r\n FetchAgencyData : func,\r\n SetAgencyId : func,\r\n Failure : func,\r\n canViewAuditData : bool,\r\n SetMergeObjectOneId : func,\r\n RedirectTo : func,\r\n SetPageTitle : func,\r\n }\r\n\r\n static defaultProps = {\r\n readOnly : false,\r\n userCreatedAgency : false,\r\n canViewAuditData : false,\r\n }\r\n\r\n state = {\r\n emailToCreate : null,\r\n phoneToCreate : null,\r\n addressToCreate : null,\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.ResetAgencyId()\r\n this.props.ClearAllSaveState()\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { agency, } = this.props\r\n const { url, id, } = this.props.params\r\n \r\n // Handles the scenario where a user creates a new Agency, saves,\r\n // then uses the browser navigation tools to navigate back to the new page\r\n if (prevProps.params.url !== url && url.endsWith('/new')) {\r\n this.props.CreateNewAgency()\r\n }\r\n else if (prevProps.params.id !== id) {\r\n this.props.FetchAgencyData(id, false)\r\n this.props.SetPageTitle(`Agency #${id}`)\r\n }\r\n else if (!isEqual(prevProps.agency, agency) && !!agency && 'AgencyName' in agency) {\r\n this.props.SetPageTitle(`Agency #${id} - ${agency.AgencyName}`)\r\n }\r\n }\r\n\r\n componentDidMount () {\r\n const { params, location, } = this.props\r\n this.props.ResetAgencyId()\r\n this.props.ClearAllSaveState()\r\n if (params && params.id) {\r\n const id = parseInt(params.id)\r\n this.props.FetchAgencyData(id, false)\r\n this.props.SetPageTitle(`Agency #${id}`)\r\n }\r\n else if (location.pathname.endsWith('new')) {\r\n this.props.CreateNewAgency()\r\n this.props.SetPageTitle('Create New Agency')\r\n }\r\n }\r\n\r\n createAddress = (values) => {\r\n const { CreateAgencyObject, agency, } = this.props\r\n if (agency && agency.AgencyId) {\r\n CreateAgencyObject(values, 'Address', agency.AgencyId)\r\n }\r\n else {\r\n this.setState({ addressToCreate: values, })\r\n }\r\n }\r\n\r\n\r\n createPhone = (values) => {\r\n const { CreateAgencyObject, agency, } = this.props\r\n if (agency && agency.AgencyId) {\r\n CreateAgencyObject(values, 'Phone', agency.AgencyId)\r\n }\r\n else {\r\n this.setState({ phoneToCreate: values, })\r\n }\r\n }\r\n\r\n createEmail = (values) => {\r\n const { CreateAgencyObject, agency, } = this.props\r\n if (agency && agency.AgencyId) {\r\n CreateAgencyObject(values, 'Email', agency.AgencyId)\r\n }\r\n else {\r\n this.setState({ emailToCreate: values, })\r\n }\r\n }\r\n\r\n createAgency = (values) => {\r\n if (values.AgencyId) {\r\n delete values['AgencyId']\r\n }\r\n this.props.CreateAgency(values)\r\n }\r\n\r\n updateAgency = (values) => {\r\n const { agency, } = this.props\r\n if (agency.AgencyId) {\r\n this.props.UpdateAgency(values, agency.AgencyId)\r\n }\r\n }\r\n\r\n doUpdate = (id, updateType, values) => {\r\n if (id) {\r\n this.props.UpdateAgencyObject(values, updateType, values[updateType + 'Id'], id)\r\n }\r\n }\r\n\r\n updatePhone = values => {\r\n const { AgencyId, } = this.props.agency\r\n this.doUpdate(AgencyId, 'Phone', values)\r\n }\r\n\r\n updateAddress = values => {\r\n const { AgencyId, } = this.props.agency\r\n this.doUpdate(AgencyId, 'Address', values)\r\n }\r\n\r\n updateEmail = values => {\r\n const { AgencyId, } = this.props.agency\r\n this.doUpdate(AgencyId, 'Email', values)\r\n }\r\n\r\n handleKeyPress = (evt) => {\r\n if (evt.charCode === 13) {\r\n this.submit()\r\n }\r\n }\r\n\r\n submit = async () => {\r\n let validForms = 0\r\n const { isNewAgency, } = this.props\r\n\r\n if (this.AgencyForm) {\r\n const agtErrs = await this.AgencyForm.validateForm()\r\n if (Object.keys(agtErrs).length === 0) {\r\n validForms++\r\n }\r\n }\r\n\r\n if (isNewAgency && validForms === 1) {\r\n if (this.AgencyForm.touched()) {\r\n this.AgencyForm.submitForm()\r\n }\r\n return\r\n }\r\n\r\n if (this.EmailForm) {\r\n const emailErrs = await this.EmailForm.validate()\r\n if (Object.keys(emailErrs).length === 0) {\r\n validForms++\r\n }\r\n }\r\n \r\n if (this.AddressForm) {\r\n const addressErrs = await this.AddressForm.validateForm()\r\n if (Object.keys(addressErrs).length === 0) {\r\n validForms++\r\n }\r\n }\r\n \r\n if (this.PhoneForm) {\r\n const phoneErrs = await this.PhoneForm.validateForm()\r\n if (Object.keys(phoneErrs).length === 0) {\r\n validForms++\r\n }\r\n }\r\n\r\n if (validForms === 4) {\r\n if (this.AgencyForm.touched()) {\r\n this.AgencyForm.submitForm()\r\n }\r\n if (this.AddressForm.touched()) {\r\n this.AddressForm.submitForm()\r\n }\r\n if (this.EmailForm.touched()) {\r\n this.EmailForm.submit()\r\n }\r\n if (this.PhoneForm.touched()) {\r\n this.PhoneForm.submitForm()\r\n }\r\n }\r\n }\r\n\r\n ajaxConfig = id => {\r\n return {\r\n url : AGENCY_PEOPLE_URL(id),\r\n data : {},\r\n }\r\n }\r\n\r\n columnDefs = () => {\r\n const personIdColIdx = DATATABLE_COLS.findIndex(c => c.title === 'Id')\r\n const { navigate, } = this.props\r\n\r\n return [\r\n {\r\n targets : personIdColIdx,\r\n createdCell : (td, cellData) =>\r\n ReactDOMRender(\r\n {\r\n stopEvent(evt)\r\n navigate({ pathname: '/admin/people/' + cellData, state: '/admin/people/', })\r\n }}>{cellData}\r\n , td\r\n ),\r\n },\r\n ]\r\n }\r\n \r\n setAgencyNode = node => this.AgencyForm = node\r\n\r\n setAddressNode = node => this.AddressForm = node\r\n\r\n setPhoneNode = node => this.PhoneForm = node\r\n\r\n setEmailNode = node => this.EmailForm = node\r\n\r\n openModal = evt => {\r\n const { dataset, } = evt.target\r\n this.props.OpenModal(dataset.target)\r\n }\r\n\r\n mergeAgency = () => {\r\n this.props.SetMergeObjectOneId(this.props.agencyId)\r\n this.props.RedirectTo('/admin/agencies/merge')\r\n }\r\n\r\n render () {\r\n const { agency, userCreatedAgency, canViewAuditData, } = this.props\r\n const readOnly = !userCreatedAgency || this.props.readOnly\r\n let Address = null\r\n let Email = null\r\n let Phone = null\r\n if (agency) {\r\n Address = agency.Address\r\n Email = agency.Email || { EmailAddress: '', }\r\n Phone = agency.Phone || { PhoneCountryCode: '', PhoneNumber: '', PhoneExtension: '', }\r\n }\r\n let saving = false\r\n if (this.props.saving) {\r\n saving = Object.values(this.props.saving).some(k => k)\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
    {(agency && agency.AgencyId && !this.props.isNewAgency) ? agency.AgencyName + ' (#' + agency.AgencyId + ')' : 'New Agency'}
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n { agency && !this.props.isNewAgency && <>\r\n
    \r\n \r\n \r\n
    Agency Address
    \r\n \r\n \r\n \r\n \r\n \r\n
    Agency Phone
    \r\n \r\n \r\n
    \r\n \r\n \r\n
    Agency Email
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n }\r\n
    \r\n \r\n \r\n Back to List\r\n \r\n { !readOnly &&\r\n \r\n { this.props.agency && !this.props.agency.ParentId && }\r\n { !this.props.isNewAgency && }\r\n \r\n \r\n }\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n { agency && !this.props.isNewAgency && \r\n <>\r\n \r\n \r\n \r\n \r\n
    Agents
    \r\n
    \r\n \r\n {\r\n console.error(req)\r\n console.dir(req)\r\n this.props.Failure('An error occurred accessing Agency People.')\r\n }}\r\n />\r\n \r\n
    \r\n \r\n
    \r\n {\r\n !!agency && <>\r\n \r\n \r\n \r\n \r\n
    Permits
    \r\n
    \r\n \r\n {\r\n console.error(req)\r\n console.dir(req)\r\n this.props.Failure('An error occurred accessing Agency Permits.')\r\n }}\r\n />\r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    Burn Requests
    \r\n
    \r\n \r\n {\r\n console.error(req)\r\n console.dir(req)\r\n this.props.Failure('An error occurred accessing Agency Requests.')\r\n }}\r\n />\r\n \r\n
    \r\n \r\n
    \r\n \r\n }\r\n \r\n }\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nfunction mapStateToProps (state) {\r\n const { agencyId, isNew, } = state.Agency\r\n return {\r\n agencyId,\r\n isNewAgency : isNew,\r\n agency : currentAgencySelector(state, agencyId),\r\n userCreatedAgency : userCreatedAgency(state),\r\n saved : agencySavedSelector(state),\r\n saving : agencySavingSelector(state),\r\n canViewAuditData : userCanViewAgencyAuitData(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n OpenModal : UiActions.openModal,\r\n ResetAgencyId : AgencyActions.resetAgencyId,\r\n ClearAllSaveState : AgencyActions.clearAllSaveState,\r\n FetchAgencyData : AgencyActions.fetchAgencyData,\r\n SetAgencyId : AgencyActions.setAgencyId,\r\n CreateNewAgency : AgencyActions.createNewAgency,\r\n CreateAgency : AgencyActions.createAgency,\r\n UpdateAgency : AgencyActions.updateAgency,\r\n DeleteAgency : AgencyActions.deleteAgency,\r\n CreateAgencyObject : AgencyActions.createAgencyObject,\r\n UpdateAgencyObject : AgencyActions.updateAgencyObject,\r\n Failure : ApiActions.failure,\r\n RedirectTo : AppActions.redirectTo,\r\n SetPageTitle : AppActions.setPageTitle,\r\n SetMergeObjectOneId : MergeActions.setObjectOneId,\r\n}\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(AgencyContainer))","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { array, func, bool, } from 'prop-types'\r\nimport { Container, Card, CardBody, Row, Col, } from 'reactstrap'\r\n\r\n// Reducers\r\nimport AppActions from '../redux/AppRedux'\r\nimport AgencyActions from '../redux/AgencyRedux'\r\n\r\n// Selectors\r\nimport { agenciesForTableSelector, } from '../selectors/agencySelectors'\r\n\r\n// Components\r\nimport DataTable from '../components/DataTable'\r\n\r\n// Models\r\nimport Agency from '../models/Agency'\r\n\r\n\r\nconst DATATABLE_COLS = Agency.getDataTablesColumns()\r\n\r\nexport class AgencyListContainer extends React.Component {\r\n static propTypes = {\r\n SetPageTitle : func,\r\n GetAllAgencies : func,\r\n agencies : array,\r\n isDnr : bool,\r\n online : bool,\r\n }\r\n\r\n componentDidMount () {\r\n const { SetPageTitle, GetAllAgencies, } = this.props\r\n\r\n SetPageTitle('Agencies')\r\n GetAllAgencies()\r\n }\r\n\r\n render () {\r\n return \r\n \r\n \r\n

    Agencies

    \r\n \r\n \r\n { this.props.isDnr && Merge Agencies}\r\n New Agency\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n const { online, } = state.offline\r\n return {\r\n online,\r\n agencies: agenciesForTableSelector(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n GetAllAgencies : AgencyActions.getAllAgencies,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AgencyListContainer)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { Container, Row, Col, CardBody, Card, } from 'reactstrap'\r\nimport { array, func, bool, } from 'prop-types'\r\n\r\n// Reducers\r\nimport AppActions from '../redux/AppRedux'\r\nimport ApiActions from '../redux/ApiRedux'\r\n\r\n// Selectors\r\nimport { getPersonDataTableCols, } from '../selectors/personSelectors'\r\nimport { userCanManageAllPeople, userCanManageLandowners, } from '../selectors/permissionSelectors'\r\n\r\n// Components\r\nimport DataTable from '../components/DataTable'\r\n\r\n// eslint-disable-next-line no-undef\r\nconst { REACT_APP_SERVER_URL, } = process.env\r\n\r\nconst ajaxConfig = {\r\n url : `${REACT_APP_SERVER_URL}People/GetPersonList`,\r\n data : {},\r\n}\r\n\r\nexport class PersonListContainer extends React.Component {\r\n static propTypes = {\r\n SetPageTitle : func,\r\n columns : array,\r\n // from parent\r\n isDnr : bool,\r\n isAgent : bool,\r\n isVerifiedAgent : bool,\r\n Failure : func,\r\n // selectors\r\n canManageLandowners : bool,\r\n canManageAllPeople : bool,\r\n }\r\n\r\n static defaultProps = {\r\n columns : [],\r\n canManageLandowners : false,\r\n canManageAllPeople : false,\r\n }\r\n\r\n componentDidMount () {\r\n this.props.SetPageTitle('People')\r\n }\r\n\r\n render () {\r\n if (!this.props.canManageAllPeople && !this.props.canManageLandowners) {\r\n return \r\n \r\n \r\n \r\n \r\n

    You are not authorized to access this page.

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

    People

    \r\n \r\n \r\n { this.props.isDnr && Merge People}\r\n New Person\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n {\r\n console.error(req)\r\n console.dir(req)\r\n this.props.Failure('An error occurred requesting People.')\r\n }}\r\n enableExport={this.props.isDnr}\r\n />\r\n \r\n \r\n \r\n \r\n
    \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n return { \r\n columns : getPersonDataTableCols(state),\r\n canManageLandowners : userCanManageLandowners(state), \r\n canManageAllPeople : userCanManageAllPeople(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n Failure : ApiActions.failure,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PersonListContainer)","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { isEqual, } from 'lodash'\r\nimport { object, array, func, bool, } from 'prop-types'\r\nimport { Container, Row, Col, Card, CardBody, CardHeader, FormGroup, Label, Input, ListGroup, ListGroupItem, } from 'reactstrap'\r\nimport { render as ReactDOMRender, } from 'react-dom'\r\n\r\n// Components\r\nimport { PersonForm, } from '../components/Forms'\r\nimport DataTable from '../components/DataTable'\r\nimport withRouter from '../components/withRouter'\r\n\r\n// Actions\r\nimport AppActions from '../redux/AppRedux'\r\nimport PersonActions from '../redux/PersonRedux'\r\n\r\n// Selectors\r\nimport { activePersonFormSelector, } from '../selectors/personSelectors'\r\nimport { permitSearchSelector, } from '../selectors/burnPermitSelectors'\r\nimport { burnRequestsSelector, } from '../selectors/burnRequestSelectors'\r\nimport {\r\n personSelector,\r\n personPhoneSelector,\r\n personAddressesSelector,\r\n personAlertPrefXrefSelector,\r\n personAgencyXrefSelector,\r\n personRegionXrefSelector,\r\n personEmailSelector,\r\n} from '../selectors/personSelectors'\r\n\r\n// Models\r\nimport BurnPermitSearch from '../models/BurnPermitSearch'\r\nimport BurnRequestSearch from '../models/BurnRequestSearch'\r\n\r\n// Utilities\r\nimport stopEvent from '../utilities/stopEvent'\r\n\r\n\r\nexport class PersonContainer extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n const { navigate, } = this.props\r\n this.burnPermitColumnDefs = [\r\n {\r\n targets : 0,\r\n createdCell : (td, cellData, rowData) =>\r\n ReactDOMRender(\r\n rowData.PermitOrderId\r\n ? {\r\n stopEvent(e)\r\n navigate(`/permits/orders/${rowData.PermitOrderId}`)\r\n }}>{rowData.PermitOrderId}\r\n : !rowData.BurnPermitNumber || (rowData.BurnPermitNumber && rowData.AgencyRegionApproval)\r\n ? ''\r\n : 'N/A'\r\n , td\r\n ),\r\n },\r\n {\r\n targets : 1,\r\n createdCell : (td, cellData) =>\r\n ReactDOMRender(\r\n {\r\n stopEvent(evt)\r\n navigate(`/permits/${cellData}`)\r\n }}>{cellData}\r\n , td\r\n ),\r\n },\r\n ]\r\n this.burnReqColumnDefs = [\r\n {\r\n targets : 0,\r\n createdCell : (td, cellData) =>\r\n ReactDOMRender(\r\n {\r\n stopEvent(evt)\r\n navigate(`/burn-requests/${cellData}`)\r\n }}>{cellData}\r\n , td\r\n ),\r\n },\r\n ]\r\n }\r\n\r\n static propTypes = {\r\n // from withRouter HOC\r\n params : object,\r\n location : object,\r\n navigate : func,\r\n \r\n User : object,\r\n actions : object,\r\n App : object,\r\n userGroups : array,\r\n SetPageTitle : func,\r\n GetPerson : func,\r\n DeactivatePerson : func,\r\n NewPerson : func,\r\n isAgent : bool,\r\n person : object,\r\n addresses : object,\r\n phones : object,\r\n permits : array,\r\n requests : array,\r\n alertPrefs : object,\r\n region : object,\r\n email : object,\r\n agency : object,\r\n isNewPerson : bool,\r\n }\r\n\r\n static defaultProps = {\r\n shouldGeocode : true,\r\n isAgent : false,\r\n }\r\n\r\n state = {\r\n UserInfoError : '',\r\n copiedMessage : '',\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.DeactivatePerson()\r\n }\r\n\r\n componentDidMount () {\r\n const {\r\n params,\r\n DeactivatePerson,\r\n NewPerson,\r\n } = this.props\r\n DeactivatePerson()\r\n if (params && params.id && !isNaN(params.id)) {\r\n const {\r\n person,\r\n GetPerson,\r\n SetPageTitle,\r\n } = this.props\r\n const id = parseInt(params.id)\r\n // don't activate person unless there's a person id\r\n // it gets passed to the saga\r\n // Pass an object that states we should search for their permits and\r\n // requests and to clear out any previous search results\r\n GetPerson(id, { permits: true, requests: true, clearPrevious: true, })\r\n if (person) {\r\n SetPageTitle(`${person.PersonFirstName} ${person.PersonLastName}`)\r\n }\r\n }\r\n else {\r\n NewPerson()\r\n }\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { person, params, location, } = this.props\r\n // Handles the scenario where a user creates a new Person, saves,\r\n // then uses the browser navigation tools to navigate back to the new page\r\n if (prevProps.location.pathname !== location.pathname && location.pathname.endsWith('/new')) {\r\n this.props.NewPerson()\r\n }\r\n const personId = parseInt(params.id)\r\n if (person && Number.isInteger(person.PersonId) && Number.isInteger(personId) && person.PersonId !== personId) {\r\n this.props.GetPerson(personId)\r\n }\r\n else if (prevProps.location.pathname.endsWith('/new') && Number.isInteger(personId)) {\r\n this.props.GetPerson(personId)\r\n }\r\n if (!isEqual(prevProps.person, this.props.person) && this.props.person) {\r\n this.props.SetPageTitle(`${this.props.person.PersonFirstName} ${this.props.person.PersonLastName}`)\r\n }\r\n }\r\n\r\n render () {\r\n const {\r\n person,\r\n isAgent,\r\n addresses,\r\n phones,\r\n alertPrefs,\r\n email,\r\n region,\r\n agency,\r\n permits,\r\n requests,\r\n } = this.props\r\n let title = ''\r\n if (person && person.CreateBy) {\r\n title = `${person.PersonFirstName} ${person.PersonLastName}`\r\n }\r\n else {\r\n title = 'New Person'\r\n }\r\n return (\r\n \r\n \r\n \r\n

    People - {title}

    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n {\r\n person && <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n Array.isArray(person.UserGroups)\r\n ? person.UserGroups.map(g => {g})\r\n : Not a User\r\n }\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n }\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n !!person && <>\r\n \r\n \r\n \r\n \r\n
    Permits
    \r\n
    \r\n \r\n {\r\n console.error(req)\r\n console.dir(req)\r\n }}\r\n />\r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    Burn Requests
    \r\n
    \r\n \r\n {\r\n console.error(req)\r\n console.dir(req)\r\n }}\r\n />\r\n \r\n
    \r\n \r\n
    \r\n \r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n const activePerson = activePersonFormSelector(state)\r\n const person = personSelector(state, activePerson)\r\n const permits = permitSearchSelector(state)\r\n const requests = burnRequestsSelector(state)\r\n return {\r\n person,\r\n permits,\r\n requests,\r\n isNewPerson : state.Person.isNewPerson,\r\n addresses : personAddressesSelector(state, activePerson),\r\n phones : personPhoneSelector(state, activePerson),\r\n alertPrefs : personAlertPrefXrefSelector(state, activePerson),\r\n agency : personAgencyXrefSelector(state, activePerson),\r\n region : personRegionXrefSelector(state, activePerson),\r\n email : personEmailSelector(state, activePerson),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n GetPerson : PersonActions.getPerson,\r\n NewPerson : PersonActions.newPerson,\r\n DeactivatePerson : PersonActions.deactivatePerson,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(PersonContainer))","// Libraries\r\nimport React from 'react'\r\nimport { Row, Col, Button, } from 'reactstrap'\r\nimport { number, func, bool, object, } from 'prop-types'\r\nimport { Formik, FieldArray, Form, } from 'formik'\r\n\r\n// Components\r\nimport Effect from '../Effect'\r\nimport { ContactConditionCard, } from '.'\r\n\r\n// Models\r\nimport { contactSchema, MAX_CONTACTS, } from '../../models/BurnPermitRequiredContactCondition'\r\n\r\n\r\nconst AddContactButton = props => {\r\n const { arrayHelpers, disabled, } = props\r\n const addContact = React.useCallback(() => arrayHelpers.push({ ContactName: '', PhoneNumber: '', PhoneExt: '', }), [ arrayHelpers, ])\r\n return \r\n Add Required Contact\r\n \r\n}\r\n\r\nAddContactButton.propTypes = {\r\n arrayHelpers : object,\r\n disabled : bool,\r\n}\r\n\r\nconst ContactConditionForm = (props) => {\r\n const { contacts, onSubmit, onDirtyChanged, } = props\r\n return \r\n {({ values, isValid, dirty, errors, handleReset, }) => {\r\n const arrayError = typeof errors.Contacts === 'string' ? errors.Contacts : null\r\n return
    \r\n \r\n {(arrayHelpers) => (\r\n \r\n \r\n Add up to {MAX_CONTACTS} phone numbers for burners to contact before beginning their burn.\r\n \r\n \r\n = MAX_CONTACTS}\r\n arrayHelpers={arrayHelpers}\r\n />\r\n \r\n {\r\n values && values.Contacts && values.Contacts.map((val, idx) => {\r\n return \r\n {\r\n onDirtyChanged(c.length > 0)\r\n }} />\r\n \r\n \r\n })\r\n }\r\n \r\n {arrayError && {arrayError}}\r\n \r\n {\r\n values && values.Contacts && <>\r\n \r\n {!isValid &&\r\n Validation Errors are present\r\n }\r\n { isValid && dirty && \r\n Unsaved changes\r\n }\r\n \r\n \r\n \r\n Reset\r\n \r\n Save Contacts\r\n \r\n \r\n }\r\n \r\n )}\r\n \r\n
    \r\n }}\r\n \r\n}\r\n\r\nContactConditionForm.propTypes = {\r\n idx : number,\r\n readOnly : bool,\r\n contacts : object,\r\n onSubmit : func,\r\n onDirtyChanged : func,\r\n}\r\n\r\nContactConditionForm.defaultProps = {\r\n idx : null,\r\n readOnly : true,\r\n contacts : null,\r\n onSubmit : () => {},\r\n onDirtyChanged : () => {},\r\n}\r\n\r\nexport default ContactConditionForm","// Libraries\nimport React from 'react'\nimport { array, } from 'prop-types'\n\n// Utilities\nimport { formatPhone, } from '../../utilities'\n\nconst ContactConditionList = ({ contacts, }) => {\n if (contacts.length > 0) {\n return
      \n {\n contacts.map((val, idx) => {\n const formattedPhone = formatPhone(val.PhoneNumber)\n return
    • \n To Notify Before Ignition: { val.ContactName }\n
      \n Phone: { formattedPhone } \n {\n val.PhoneExt \n ? <>Ext: { val.PhoneExt }\n : null\n }\n
    • \n })\n }\n
    \n }\n return null\n}\n\nContactConditionList.propTypes = {\n contacts: array,\n}\nContactConditionList.defaultProps = {\n contacts: null,\n}\n\nexport default ContactConditionList","// Libraries\r\nimport React from 'react'\r\nimport { FormGroup, Label, Button, Card, CardBody, } from 'reactstrap'\r\nimport { Field, } from 'formik'\r\nimport { number, func, } from 'prop-types'\r\n\r\n// Components\r\nimport { ValidatingField, } from '../FormControls'\r\n\r\n\r\nconst ContactConditionCard = ({ idx, removeFunc, }) => {\r\n const onClick = React.useCallback(() => removeFunc(idx), [ idx, removeFunc, ])\r\n if (isNaN(idx) || idx < 0) {\r\n return null\r\n }\r\n const fieldNamePrefix = `Contacts[${idx}].`\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n}\r\n\r\nContactConditionCard.propTypes = {\r\n idx : number,\r\n removeFunc : func,\r\n}\r\n\r\nContactConditionCard.defaultProps = {\r\n idx : -1,\r\n removeFunc : () => {},\r\n}\r\n\r\nexport default ContactConditionCard","import React from 'react'\r\nimport { Input, Row, FormFeedback, Col, } from 'reactstrap'\r\nimport { string, bool, object, func, PropTypes, number, } from 'prop-types'\r\n\r\nexport default class InputCondition extends React.Component {\r\n \r\n constructor (props) {\r\n super(props)\r\n\r\n this.state = {\r\n value: props.value,\r\n }\r\n }\r\n\r\n static propTypes = {\r\n selected : bool,\r\n condition : object,\r\n value : PropTypes.oneOfType([ string, number, ]),\r\n type : string,\r\n readOnly : bool,\r\n unit : string,\r\n onValueChanged : func.isRequired,\r\n valSchema : object,\r\n conditionValidityChanged : func.isRequired,\r\n }\r\n\r\n static defaultProps = {\r\n selected : false,\r\n condition : {},\r\n value : '',\r\n readOnly : false,\r\n unit : null,\r\n onValueChanged : null,\r\n valSchema : null,\r\n conditionValidityChanged : null,\r\n type : 'text',\r\n }\r\n\r\n state = {\r\n valid : true,\r\n error : '',\r\n }\r\n\r\n isValid = (value) => {\r\n const { valSchema, selected, readOnly, } = this.props\r\n if (!selected || readOnly) {\r\n return { valid: true, error: '', }\r\n }\r\n\r\n let valid = false\r\n let error = ''\r\n try {\r\n valSchema.validateSync(value, { abortEarly: true, })\r\n valid = true\r\n } catch (err) {\r\n if (err.errors && Array.isArray(err.errors) && err.errors.length > 0) {\r\n valid = false\r\n error = err.errors[0]\r\n }\r\n }\r\n return { valid, error, }\r\n }\r\n\r\n componentDidMount () {\r\n if (this.props.selected) {\r\n const { valid, error, } = this.isValid(this.props.value)\r\n this.setState({ valid, error, }, () => this.props.conditionValidityChanged(this.props.condition.BurnPermitConditionId, valid))\r\n }\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { valid, error, } = this.isValid(this.props.value)\r\n const { selected, conditionValidityChanged, condition, } = this.props\r\n\r\n if (selected && (this.state.valid !== valid)) {\r\n this.setState({ valid, error, }, conditionValidityChanged(condition.BurnPermitConditionId, valid))\r\n } else if (!selected && !this.state.valid) {\r\n this.setState({ valid: true, error: '', }, () => conditionValidityChanged(condition.BurnPermitConditionId, true))\r\n }\r\n if (prevProps.value !== this.props.value) {\r\n this.setState({ value: this.props.value, })\r\n }\r\n }\r\n\r\n onValueChanged = evt => {\r\n const { value, } = evt.target\r\n const { onValueChanged, conditionValidityChanged, condition, } = this.props\r\n const { valid, error, } = this.isValid(value)\r\n this.setState({ valid, error, value, }, () => {\r\n onValueChanged(condition.BurnPermitConditionId, value)\r\n conditionValidityChanged(condition.BurnPermitConditionId, valid)\r\n })\r\n }\r\n\r\n render () {\r\n const { \r\n condition, \r\n selected,\r\n readOnly,\r\n unit,\r\n type,\r\n } = this.props\r\n\r\n const {\r\n valid,\r\n error,\r\n value,\r\n } = this.state\r\n\r\n if (!condition) {\r\n return 'No condition provided.'\r\n }\r\n const invalid = selected && !readOnly && !valid\r\n let className = 'inline-text-input'\r\n let additionalProps\r\n if (type === 'textarea') {\r\n additionalProps = {\r\n rows: 5,\r\n }\r\n className = 'textarea-condition'\r\n } else if (type !== 'text') {\r\n className = 'number-condition'\r\n additionalProps = {\r\n min : 0,\r\n step : 1,\r\n placeholder : selected ? '0' : '',\r\n }\r\n }\r\n const id = `condition-${condition.BurnPermitConditionId}-input`\r\n const rowClassName = `${(readOnly && !value) || !selected ? 'grey-text' : null} mb-2`\r\n return (\r\n \r\n \r\n \r\n {\r\n readOnly && selected ? {value} {unit}\r\n : <>\r\n \r\n {unit}\r\n { invalid && {error} }\r\n \r\n }\r\n \r\n \r\n )\r\n }\r\n}","// Libraries\r\nimport React from 'react'\r\nimport { bool, object, func, string, } from 'prop-types'\r\nimport { Editor as RDEditor, } from 'react-draft-wysiwyg'\r\nimport 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'\r\nimport { convertToRaw, } from 'draft-js'\r\nimport draftToHtml from 'draftjs-to-html'\r\n\r\nconst Editor = ({ \r\n readOnly,\r\n onChange,\r\n name,\r\n value,\r\n wrapperClassName,\r\n editorClassName,\r\n toolbarClassName,\r\n id,\r\n}) => { \r\n // call parent change callback when editor state changes\r\n const editorStateChange = React.useCallback((editorState) => {\r\n if (onChange) {\r\n onChange({\r\n target: {\r\n name,\r\n value: editorState,\r\n },\r\n })\r\n }\r\n }, [ name, onChange, ])\r\n\r\n // if the editor is read-only, render as HTML\r\n const valueHtml = React.useMemo(() => {\r\n if (readOnly && value && value.getCurrentContent) {\r\n const rawContentState = convertToRaw(value.getCurrentContent())\r\n return
    \r\n }\r\n }, [ readOnly, value, ])\r\n\r\n if (readOnly && value) {\r\n return valueHtml\r\n }\r\n // only return editor when the condition isn't read-only \r\n return \r\n}\r\n\r\nEditor.propTypes = {\r\n readOnly : bool,\r\n onChange : func,\r\n onBlur : func,\r\n name : string,\r\n className : string,\r\n value : object,\r\n wrapperClassName : string,\r\n editorClassName : string,\r\n toolbarClassName : string,\r\n id : string,\r\n}\r\n\r\nEditor.defaultProps = {\r\n readOnly : false,\r\n name : 'wysiwyg-editor',\r\n wrapperClassName : '',\r\n editorClassName : '',\r\n toolbarClassName : '',\r\n id : '',\r\n}\r\n\r\nexport default Editor","import React from 'react'\r\nimport { Row, FormFeedback, Col, } from 'reactstrap'\r\nimport { string, bool, object, func, PropTypes, } from 'prop-types'\r\nimport Editor from '../FormControls/Editor'\r\n\r\nconst EditorCondition = ({\r\n value,\r\n selected,\r\n condition : {\r\n BurnPermitConditionId = '',\r\n BurnPermitConditionDescription = '',\r\n },\r\n readOnly,\r\n onValueChanged,\r\n valSchema,\r\n conditionValidityChanged, \r\n}) => {\r\n // State and refs\r\n const [ state, dispatch, ] = React.useReducer(reducer, {\r\n value,\r\n valid : true,\r\n error : '',\r\n })\r\n\r\n // Update parent when value changes\r\n React.useEffect(() => {\r\n if (BurnPermitConditionId && onValueChanged){\r\n onValueChanged(BurnPermitConditionId, state.value)\r\n }\r\n }, [ BurnPermitConditionId, onValueChanged, state.value, ])\r\n\r\n // Update parent when validity changes\r\n React.useEffect(() => {\r\n if (BurnPermitConditionId && conditionValidityChanged) {\r\n conditionValidityChanged(BurnPermitConditionId, state.valid)\r\n }\r\n }, [ state.valid, BurnPermitConditionId, conditionValidityChanged, ])\r\n\r\n // Validate when the state value changes\r\n React.useEffect(() => {\r\n if (!selected || readOnly || !valSchema) {\r\n dispatch({ type: 'VALIDATED', payload: { valid: true, error: '', }, })\r\n return\r\n }\r\n\r\n let valid = false\r\n let error = ''\r\n try {\r\n valSchema.validateSync(state.value, { abortEarly: true, })\r\n valid = true\r\n } catch (err) {\r\n if (err.errors && Array.isArray(err.errors) && err.errors.length > 0) {\r\n valid = false\r\n error = err.errors[0]\r\n }\r\n }\r\n dispatch({ type: 'VALIDATED', payload: { valid, error, }, })\r\n }, [ readOnly, selected, valSchema, state.value, ])\r\n\r\n // Value changeed callback\r\n const valueChanged = React.useCallback((evt) => {\r\n dispatch({ type: 'VALUE_CHANGED', payload: evt.target.value, })\r\n }, [])\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {state.error}\r\n { !readOnly && selected && }\r\n \r\n \r\n )\r\n}\r\n\r\nEditorCondition.defaultProps = {\r\n selected : false,\r\n condition : {},\r\n value : '',\r\n readOnly : false,\r\n unit : null,\r\n onValueChanged : null,\r\n valSchema : null,\r\n conditionValidityChanged : null,\r\n type : 'text',\r\n}\r\n\r\nEditorCondition.propTypes = {\r\n selected : bool,\r\n condition : object,\r\n value : PropTypes.oneOfType([ string, object, ]),\r\n type : string,\r\n readOnly : bool,\r\n unit : string,\r\n onValueChanged : func.isRequired,\r\n valSchema : object,\r\n conditionValidityChanged : func.isRequired,\r\n}\r\n\r\nfunction reducer (state, action) {\r\n if (!action || !action.type) {\r\n return state\r\n }\r\n switch (action.type) {\r\n case 'VALIDATED' :\r\n if (!action.payload) {\r\n break\r\n }\r\n return {\r\n ...state,\r\n valid : action.payload.valid,\r\n error : action.payload.error,\r\n }\r\n case 'VALUE_CHANGED':\r\n return {\r\n ...state,\r\n value: action.payload,\r\n }\r\n default:\r\n break\r\n }\r\n return state\r\n}\r\n\r\nexport default React.memo(EditorCondition)","import React from 'react'\r\nimport { Label, Input, Row, Col, } from 'reactstrap'\r\nimport { func, string, array, bool, object, PropTypes, number, } from 'prop-types'\r\n\r\nconst BaseCondition = (props) => {\r\n const {\r\n condition,\r\n selected,\r\n onConditionSelected,\r\n readOnly,\r\n error,\r\n children,\r\n label,\r\n indent,\r\n } = props\r\n \r\n const onChange = React.useCallback((e) => onConditionSelected(e, condition), [ onConditionSelected, condition, ])\r\n \r\n if (!condition) {\r\n return (\r\n \r\n \r\n {children || 'No condition provided.'}\r\n \r\n \r\n )\r\n }\r\n let errorSection = null\r\n if (Array.isArray(error)) {\r\n errorSection = error.map((e, idx) => {\r\n return \r\n Error: {e}\r\n \r\n })\r\n } else if (typeof error === 'string') {\r\n errorSection = (\r\n \r\n Error: {error}\r\n \r\n )\r\n }\r\n const { BurnPermitConditionId, } = condition\r\n const conditionKey = `pmt-cnd-enable-check-${BurnPermitConditionId}`\r\n const className = `${BurnPermitConditionId > 9 ? 'mr-2' : 'mr-3'} mb-2`\r\n return <>\r\n \r\n \r\n \r\n \r\n {label}.\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n {errorSection}\r\n \r\n}\r\n\r\nBaseCondition.propTypes = {\r\n selected : bool,\r\n condition : object,\r\n onConditionSelected : func.isRequired,\r\n children : PropTypes.oneOfType([ object, array, string, ]),\r\n error : PropTypes.oneOfType([ object, array, string, ]),\r\n readOnly : bool,\r\n label : PropTypes.oneOfType([ string, number, ]),\r\n indent : bool,\r\n}\r\n\r\nBaseCondition.defaultProps = {\r\n onConditionSelected : () => {},\r\n error : null,\r\n selected : false,\r\n condition : {},\r\n readOnly : false,\r\n label : '',\r\n indent : false,\r\n}\r\n\r\nexport default BaseCondition","// Libraries\r\nimport React from 'react'\r\nimport { Row, } from 'reactstrap'\r\nimport { func, number, string, bool, object, PropTypes, array, } from 'prop-types'\r\n\r\n// Models\r\nimport BurnPermitConditionXref from '../../models/BurnPermitConditionXref'\r\n\r\n// Components\r\nimport InputCondition from './InputCondition'\r\nimport EditorCondition from './EditorCondition'\r\nimport BaseCondition from './BaseCondition'\r\n\r\n\r\n/** Renders a Boolean, Number, or Text Condition */\r\nconst Condition = (props) => {\r\n const {\r\n condition,\r\n value,\r\n selected,\r\n onConditionChecked,\r\n onValueChanged,\r\n conditionValidityChanged,\r\n label,\r\n indent,\r\n parentIsSelected,\r\n readOnly,\r\n } = props\r\n \r\n if (!condition) {\r\n return 'No condition provided.'\r\n }\r\n \r\n const {\r\n BurnPermitConditionName,\r\n BurnPermitConditionId,\r\n Category,\r\n } = condition\r\n\r\n let conditionBody = null\r\n const conditionProps = {\r\n selected,\r\n condition,\r\n readOnly,\r\n onValueChanged,\r\n conditionValidityChanged,\r\n label,\r\n indent,\r\n key : `cond-${BurnPermitConditionId}`,\r\n value : value || '',\r\n valSchema : BurnPermitConditionXref.getValidationSchema(BurnPermitConditionName),\r\n }\r\n let unit = BurnPermitConditionXref.getUnit(BurnPermitConditionName)\r\n if (unit) {\r\n conditionProps.unit = unit\r\n }\r\n\r\n conditionProps.readOnly = readOnly || (indent && !parentIsSelected)\r\n switch (Category) {\r\n case 'Number':\r\n conditionBody = \r\n break\r\n case 'Text':\r\n conditionBody = \r\n break\r\n case 'Textarea':\r\n conditionBody = \r\n break\r\n case 'Boolean':\r\n conditionProps.value = typeof value !== 'boolean' ? false : value\r\n conditionBody = {condition.BurnPermitConditionDescription}\r\n break\r\n default:\r\n return null\r\n } \r\n return \r\n {conditionBody}\r\n \r\n}\r\n\r\nCondition.propTypes = {\r\n value : PropTypes.oneOfType([ object, string, bool, number, ]),\r\n condition : object,\r\n selected : bool,\r\n parentIsSelected : bool,\r\n readOnly : bool,\r\n onConditionChecked : func.isRequired,\r\n onValueChanged : func.isRequired,\r\n error : PropTypes.oneOfType([ object, string, array, ]),\r\n conditionValidityChanged : func.isRequired,\r\n label : PropTypes.oneOfType([ number, string, ]),\r\n indent : bool,\r\n}\r\n\r\nCondition.defaultProps = {\r\n value : null,\r\n condition : {},\r\n selected : false,\r\n onConditionChecked : null,\r\n onValueChanged : null,\r\n conditionValidityChanged : null,\r\n error : null,\r\n readOnly : false,\r\n label : '',\r\n indent : false,\r\n}\r\n\r\nexport default Condition","import React from 'react'\r\nimport { Label, Input, Col, } from 'reactstrap'\r\nimport { array, bool, string, func, } from 'prop-types'\r\n\r\nconst ConditionCheckboxes = (props) => {\r\n const { data, pfx, selectedData, onValueChanged, readOnly, } = props\r\n const onCheckChanged = React.useCallback((val) => onValueChanged(val), [ onValueChanged, ])\r\n\r\n if (!data || data.length < 1) {\r\n return No data available.\r\n }\r\n\r\n const checkboxes = data.map(d => {\r\n const checked = selectedData && selectedData.includes(d.Value)\r\n return \r\n \r\n \r\n })\r\n \r\n return checkboxes\r\n}\r\n\r\nConditionCheckboxes.propTypes = {\r\n data : array,\r\n selectedData : array,\r\n readOnly : bool,\r\n pfx : string.isRequired,\r\n onValueChanged : func.isRequired,\r\n}\r\n\r\nConditionCheckboxes.defaultProps = {\r\n data : [],\r\n selectedData : [],\r\n readOnly : true,\r\n pfx : '',\r\n onValueChanged : null,\r\n}\r\n\r\nexport default ConditionCheckboxes","import React from 'react'\r\nimport { Row, Input, } from 'reactstrap'\r\nimport { array, bool, object, func, number, string, PropTypes, } from 'prop-types'\r\nimport ConditionCheckboxes from './ConditionCheckboxes'\r\nimport BaseCondition from './BaseCondition'\r\n\r\nexport default class MultiSelectCondition extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n\r\n this.state = {\r\n valid : true,\r\n error : '',\r\n otherValue : this.getOtherValue(),\r\n }\r\n }\r\n\r\n static propTypes = {\r\n value : array,\r\n condition : object,\r\n data : array,\r\n readOnly : bool,\r\n onValueChanged : func.isRequired,\r\n onConditionChecked : func.isRequired,\r\n selected : bool,\r\n conditionValidityChanged : func.isRequired,\r\n label : PropTypes.oneOfType([ number, string, ]),\r\n }\r\n\r\n static defaultProps = {\r\n value : [],\r\n condition : {},\r\n data : [],\r\n readOnly : false,\r\n onValueChanged : null,\r\n onConditionChecked : null,\r\n selected : false,\r\n conditionValidityChanged : null,\r\n }\r\n\r\n isValid = (newValue) => {\r\n const { value, condition, selected, readOnly, } = this.props\r\n if (!selected || readOnly) {\r\n return { valid: true, error: '', }\r\n }\r\n const { BurnPermitConditionName, } = condition\r\n let isValidNow = false\r\n let newError = ''\r\n if ((value.length === 1) && (newValue === value[0])) {\r\n newError = `At least one ${BurnPermitConditionName} value must be selected`\r\n }\r\n else if (this.otherIsChecked() && !this.state.otherValue) {\r\n newError = 'You must enter a description for `Other`'\r\n }\r\n else {\r\n isValidNow = true\r\n }\r\n return { valid: isValidNow, error: newError, }\r\n }\r\n\r\n componentDidMount () {\r\n const { selected, value, condition, } = this.props\r\n if (condition && selected) {\r\n const isValidNow = !selected || (value && value.length > 0)\r\n this.updateValidity(isValidNow, condition.BurnPermitConditionName)\r\n }\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { selected, value, condition, } = this.props\r\n const { BurnPermitConditionName, } = condition\r\n\r\n if (!prevProps.selected && selected) {\r\n this.updateValidity(!value, BurnPermitConditionName)\r\n }\r\n if (prevProps.value !== this.props.value) {\r\n this.setState({ otherValue: this.getOtherValue(), }, () => {\r\n let valid = value.length > 0\r\n if (valid && this.otherIsChecked()) {\r\n const error = this.isValid()\r\n if (!error.valid) {\r\n valid = error.valid\r\n this.setState({ ...error, })\r\n this.props.conditionValidityChanged(this.props.condition.BurnPermitConditionId, error.valid)\r\n }\r\n }\r\n if (valid) {\r\n this.updateValidity(valid, BurnPermitConditionName)\r\n }\r\n })\r\n }\r\n }\r\n\r\n getOtherValue = () => {\r\n return this.props.value.filter(v => typeof v === 'string')[0] || ''\r\n }\r\n\r\n updateValidity = (valid, condName = '') => {\r\n this.setState({\r\n valid,\r\n error: valid ? '' : `At least one ${condName} value must be selected`,\r\n }, () => this.props.conditionValidityChanged(this.props.condition.BurnPermitConditionId, valid))\r\n }\r\n\r\n onOtherChange = evt => {\r\n const { value, } = evt.target\r\n this.setState({ otherValue: value, }, () => {\r\n this.onValueChanged(this.state.otherValue)\r\n })\r\n }\r\n\r\n onValueChanged = (newValue) => {\r\n const { onValueChanged, conditionValidityChanged, condition, } = this.props\r\n const { valid, error, } = this.isValid(newValue)\r\n this.setState({ valid, error, }, () => {\r\n onValueChanged(condition.BurnPermitConditionId, newValue)\r\n conditionValidityChanged(condition.BurnPermitConditionId, valid)\r\n })\r\n }\r\n\r\n otherIsChecked = id => {\r\n const { data, value, } = this.props\r\n return data.some(d => (id === d.Value || value.includes(d.Value)) && d.Text === 'Other')\r\n }\r\n\r\n render () {\r\n const {\r\n data,\r\n condition,\r\n value,\r\n selected,\r\n onConditionChecked,\r\n label,\r\n readOnly,\r\n } = this.props\r\n const {\r\n BurnPermitConditionId,\r\n BurnPermitConditionDescription,\r\n } = condition\r\n const { \r\n valid,\r\n error,\r\n otherValue,\r\n } = this.state\r\n \r\n return (\r\n \r\n \r\n { BurnPermitConditionDescription }:\r\n \r\n \r\n \r\n {\r\n this.otherIsChecked() && \r\n }\r\n {\r\n !readOnly && !valid &&
    { error }
    \r\n }\r\n
    \r\n \r\n )\r\n }\r\n}\r\n","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { func, string, array, bool, object, PropTypes, } from 'prop-types'\r\nimport { isEqual, } from 'lodash'\r\n\r\n// Components\r\nimport Condition from './Condition'\r\nimport MultiSelectCondition from './MultiSelectCondition'\r\n\r\n// Redux\r\nimport ConditionActions from '../../redux/BurnPermitConditionsRedux'\r\n\r\n// Selectors\r\nimport { equipmentTypeCheckboxSelector, daysOfWeekCheckboxSelector, } from '../../selectors/selectors'\r\nimport { directionsSelectSelector, } from '../../selectors/burnPermitSiteSelectors'\r\nimport { \r\n conditionValuesNewForBurnPermitSelector,\r\n conditionErrorsSelector,\r\n burnPermitConditionsSelector,\r\n} from '../../selectors/conditionsSelectors'\r\n\r\nclass PermitConditions extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n const { PermitConditionValues, } = this.props\r\n this.state = { ...this.mapSelectedValues(PermitConditionValues), }\r\n }\r\n\r\n static propTypes = {\r\n Conditions : array,\r\n Directions : array,\r\n DaysOfWeek : array,\r\n Equipment : array,\r\n PermitConditionValues : object,\r\n readOnly : bool,\r\n disabled : bool,\r\n onChanged : func,\r\n SetConditionErrors : func,\r\n ClearConditionError : func,\r\n onValidityChanged : func.isRequired,\r\n ConditionErrors : PropTypes.oneOfType([ array, string, object , ]),\r\n }\r\n\r\n static defaultProps = {\r\n Conditions : [],\r\n Directions : [],\r\n DaysOfWeek : [],\r\n Equipment : [],\r\n PermitConditionValues : null,\r\n onValidityChanged : null,\r\n onChanged : null,\r\n ConditionErrors : null,\r\n readOnly : false,\r\n disabled : false,\r\n }\r\n\r\n mapSelectedValues = values => {\r\n return { \r\n selectedConditions : values ? Object.keys(values).map(c => parseInt(c)) : [],\r\n selectedConditionValues : values || {},\r\n selectedConditionvalidity : values ? Object.keys(values).reduce((res, id) => {\r\n res[id] = true\r\n return res\r\n }, {}) : {},\r\n } \r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { PermitConditionValues, disabled, } = this.props\r\n\r\n // values changed\r\n if (!isEqual(prevProps.PermitConditionValues, PermitConditionValues)) {\r\n const mappedValues = this.mapSelectedValues(PermitConditionValues)\r\n if (!isEqual(this.state, mappedValues)) {\r\n this.setState({ ...mappedValues, })\r\n }\r\n }\r\n // This will typically happen a user begins editing the conditions \r\n // of an issued permit but clicks the cancel button. When this happens,\r\n // reset the conditions, values and validation messages to the originals\r\n if (prevProps.disabled === false && disabled === true) {\r\n const mappedValues = this.mapSelectedValues(PermitConditionValues)\r\n if (!isEqual(this.state, mappedValues)) {\r\n this.setState({ ...mappedValues, })\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for when a condition is checked.\r\n * Adds/removes entries in selected, values, and validitiy state objs/arrays\r\n * @callback permitConditionChecked\r\n * @param {object} e - The check event\r\n * @param {object} e.target - The event target\r\n * @param {bool} e.target.checked - The checked status of the target elem\r\n * @param {Object} condition The clicked condition's information\r\n */\r\n permitConditionChecked = (e, condition) => {\r\n const { checked, } = e.target\r\n const { \r\n BurnPermitConditionId, \r\n ParentConditionId,\r\n ChildConditions,\r\n Category,\r\n } = condition\r\n const { \r\n selectedConditions,\r\n selectedConditionValues, \r\n selectedConditionValidity, \r\n } = this.state\r\n\r\n const newConditionValues = { ...selectedConditionValues, }\r\n const newConditionValidity = { ...selectedConditionValidity, }\r\n let newSelectedConditions = [ ...selectedConditions, ]\r\n\r\n if (checked) {\r\n // check to see this is a child condition\r\n const addParent = ParentConditionId && !selectedConditions.includes(ParentConditionId)\r\n // set up our ids to concat\r\n let idsToAdd = [ BurnPermitConditionId, ]\r\n if (addParent) {\r\n // assume parent conditions are always basic and add a true value\r\n newConditionValues[ParentConditionId] = true\r\n newConditionValidity[ParentConditionId] = true\r\n idsToAdd.push(ParentConditionId)\r\n }\r\n if (ChildConditions.length > 0) {\r\n // Call the redux action to set a validation message that requires\r\n // one of the child conditions to be checked\r\n this.props.SetConditionErrors({ [BurnPermitConditionId]: `You must select one or more of the following conditions: ${ChildConditions.join(', ')}`, })\r\n }\r\n else if (ParentConditionId > 0 && this.props.ConditionErrors[ParentConditionId]) {\r\n this.props.ClearConditionError(ParentConditionId)\r\n }\r\n // this should always be true, but prevent duplicates\r\n if (!selectedConditions.includes(BurnPermitConditionId)) {\r\n // mark the checked condition as selected\r\n newSelectedConditions = selectedConditions.concat(idsToAdd)\r\n \r\n // configure a default value based on the condition category\r\n if (Category === 'Text' || Category === 'Number') {\r\n // text/number conditions are invalid by default\r\n newConditionValidity[BurnPermitConditionId] = false\r\n newConditionValues[BurnPermitConditionId] = ''\r\n } else if (Category === 'Boolean') {\r\n newConditionValidity[BurnPermitConditionId] = true\r\n newConditionValues[BurnPermitConditionId] = true\r\n }\r\n }\r\n } else {\r\n // if this is a parent condition, deselect this condition and all children\r\n if (ChildConditions.length > 0) {\r\n this.props.ClearConditionError(BurnPermitConditionId)\r\n newSelectedConditions = selectedConditions.filter((id) => (id !== BurnPermitConditionId) && (!ChildConditions.includes(id)))\r\n ChildConditions.forEach((x) => {\r\n if (x in newConditionValues) {\r\n delete newConditionValues[x] \r\n }\r\n if (x in newConditionValidity) {\r\n delete newConditionValidity[x]\r\n }\r\n })\r\n } else {\r\n // not a parent, remove the deselected condition\r\n newSelectedConditions = selectedConditions.filter(s => s !== BurnPermitConditionId)\r\n // check if there is a ParentConditionId and deselect the parent if all other children are deselected\r\n if (ParentConditionId > 0) {\r\n // get parent condition\r\n const parentCond = this.props.Conditions.find(c => c.BurnPermitConditionId === ParentConditionId)\r\n if (parentCond) {\r\n // get the sibling condition ids of parent condition, excluding the current one\r\n const siblings = parentCond.ChildConditions.filter(c => c !== BurnPermitConditionId)\r\n // check if selectedConditions has any other children condition ids in it\r\n if (newSelectedConditions.some(s => siblings.includes(s)) === false) {\r\n // if no other children/siblings are selected, remove the parent condition\r\n newSelectedConditions = newSelectedConditions.filter(s => s !== ParentConditionId)\r\n this.props.ClearConditionError(BurnPermitConditionId)\r\n }\r\n }\r\n }\r\n }\r\n // remove value and validation status\r\n if (BurnPermitConditionId in newConditionValidity) {\r\n delete newConditionValidity[BurnPermitConditionId]\r\n }\r\n if (BurnPermitConditionId in newConditionValues) {\r\n delete newConditionValues[BurnPermitConditionId]\r\n }\r\n }\r\n\r\n this.setState({\r\n selectedConditions : newSelectedConditions,\r\n selectedConditionValues : newConditionValues,\r\n selectedConditionValidity : newConditionValidity,\r\n })\r\n \r\n this.props.onChanged(newConditionValues)\r\n this.props.onValidityChanged(newConditionValidity)\r\n }\r\n\r\n conditionValidityChanged = (id, valid) => {\r\n if (!id || ((valid === null) || (valid === undefined))) {\r\n return\r\n }\r\n let nextValids = {\r\n ...this.state.selectedConditionValidity,\r\n }\r\n nextValids[id] = valid\r\n this.setState({ selectedConditionValidity: nextValids, })\r\n this.props.onValidityChanged(nextValids)\r\n }\r\n\r\n conditionValueChanged = (id, value) => {\r\n if (!id) {\r\n return\r\n }\r\n let nextState = {}\r\n if (this.state.selectedConditionValues) {\r\n nextState = {\r\n ...this.state.selectedConditionValues,\r\n }\r\n }\r\n nextState[id] = value\r\n this.setState({ \r\n selectedConditionValues: nextState,\r\n })\r\n this.props.onChanged(nextState)\r\n }\r\n\r\n multiSelectValueChanged = (BurnPermitConditionId, newValue) => {\r\n if (!BurnPermitConditionId || !newValue) {\r\n return\r\n }\r\n let nextValues = {\r\n ...this.state.selectedConditionValues,\r\n }\r\n const oldValue = this.state.selectedConditionValues[BurnPermitConditionId]\r\n if (oldValue && Array.isArray(oldValue)) {\r\n if (oldValue.includes(newValue)) {\r\n nextValues[BurnPermitConditionId] = oldValue.filter(v => v !== newValue)\r\n }\r\n else if (typeof newValue === 'string') {\r\n nextValues[BurnPermitConditionId] = [ ...oldValue.filter(v => typeof v !== 'string'), newValue, ]\r\n }\r\n else {\r\n nextValues[BurnPermitConditionId] = oldValue.concat([ newValue, ])\r\n }\r\n }\r\n else {\r\n nextValues[BurnPermitConditionId] = [ newValue, ]\r\n }\r\n this.setState({ \r\n selectedConditionValues: nextValues, \r\n })\r\n this.props.onChanged(nextValues)\r\n }\r\n\r\n render () {\r\n const { \r\n Conditions, \r\n Equipment,\r\n Directions,\r\n DaysOfWeek,\r\n readOnly,\r\n disabled,\r\n ConditionErrors,\r\n } = this.props\r\n const { \r\n selectedConditions,\r\n selectedConditionValues,\r\n } = this.state\r\n\r\n let markup = null\r\n if (Conditions && Conditions.length > 0) {\r\n markup = Conditions.map((c, idx) => {\r\n const { \r\n BurnPermitConditionId,\r\n ParentConditionId, \r\n BurnPermitConditionName, \r\n } = c\r\n\r\n const value = selectedConditionValues[BurnPermitConditionId] !== null? selectedConditionValues[BurnPermitConditionId] : ''\r\n let selected = selectedConditions.includes(BurnPermitConditionId)\r\n if (ParentConditionId) {\r\n selected = selected && selectedConditions.includes(ParentConditionId)\r\n }\r\n const key = `condition-${BurnPermitConditionId}`\r\n const error = ConditionErrors ? ConditionErrors[BurnPermitConditionId] : null\r\n\r\n let condition = null\r\n const basicProps = {\r\n key,\r\n value,\r\n selected,\r\n error,\r\n readOnly,\r\n disabled,\r\n condition : c,\r\n label : idx + 1,\r\n indent : ParentConditionId > 0,\r\n parentIsSelected : selectedConditions.includes(ParentConditionId),\r\n onConditionChecked : this.permitConditionChecked,\r\n conditionValidityChanged : this.conditionValidityChanged,\r\n }\r\n switch (BurnPermitConditionName) {\r\n case 'Wind direction':\r\n condition = \r\n break\r\n case 'Days of the week':\r\n condition = \r\n break\r\n case 'Equipment requirements':\r\n condition = \r\n break\r\n case 'Other conditions':\r\n condition = \r\n break\r\n default:\r\n condition = \r\n break\r\n }\r\n return condition\r\n })\r\n }\r\n\r\n return markup\r\n }\r\n}\r\n\r\nconst FIRE_LINE_CONSTRUCTION = 'Fire Line Construction'\r\n\r\nfunction mapStateToProps (state) {\r\n return {\r\n Conditions : burnPermitConditionsSelector(state),\r\n DaysOfWeek : daysOfWeekCheckboxSelector(state),\r\n Directions : directionsSelectSelector(state),\r\n Equipment : equipmentTypeCheckboxSelector(state, { category: FIRE_LINE_CONSTRUCTION, }),\r\n PermitConditionValues : conditionValuesNewForBurnPermitSelector(state),\r\n ConditionErrors : conditionErrorsSelector(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ClearConditionError : ConditionActions.clearConditionError,\r\n SetConditionErrors : ConditionActions.setConditionErrors,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PermitConditions)","// Libraries\r\nimport React from 'react'\r\nimport { Button, } from 'reactstrap'\r\nimport { useDispatch, } from 'react-redux'\r\nimport { func, bool, } from 'prop-types'\r\n\r\n// Components\r\nimport ConfirmationModal from '../ConfirmationModal'\r\nimport { PopoverButton, } from '../FormControls'\r\n\r\n// Redux\r\nimport UiActions from '../../redux/UiRedux'\r\n\r\nconst modalKey = 'EDIT_CONTACTS_CONDITIONS'\r\n\r\nconst EditContactsAndConditions = props => {\r\n const { online, submitAction, } = props\r\n \r\n const dispatch = useDispatch()\r\n \r\n const onClick = React.useCallback(() => dispatch(UiActions.openModal(modalKey)), [ dispatch, ])\r\n \r\n const onConfirm = React.useCallback(() => {\r\n dispatch(UiActions.closeModal())\r\n submitAction()\r\n }, [ dispatch, submitAction, ])\r\n \r\n return <>\r\n \r\n \r\n Edit\r\n \r\n {\r\n !online\r\n ? \r\n : null\r\n }\r\n \r\n

    \r\n Are you sure you want to update these Contacts and Conditions?\r\n

    \r\n

    \r\n If so, you must sign a new permit in DocuSign.\r\n

    \r\n }\r\n submitActionLabel={'Yes, I\\'m sure'}\r\n submitAction={onConfirm}\r\n />\r\n \r\n}\r\n\r\nEditContactsAndConditions.propTypes = {\r\n submitAction : func,\r\n online : bool,\r\n}\r\n\r\nexport default EditContactsAndConditions","// Libraries\r\nimport React from 'react'\r\nimport { Link, } from 'react-router-dom'\r\nimport {\r\n Alert,\r\n Card,\r\n CardBody,\r\n Col,\r\n Container,\r\n Row,\r\n Button,\r\n CardHeader,\r\n} from 'reactstrap'\r\nimport { func, object, bool, number, string, shape, arrayOf, } from 'prop-types'\r\nimport { connect, } from 'react-redux'\r\nimport { isEqual, } from 'lodash'\r\n\r\n// Reducers\r\nimport ConditionActions from '../redux/BurnPermitConditionsRedux'\r\nimport AppActions from '../redux/AppRedux'\r\nimport ApiActions from '../redux/ApiRedux'\r\n\r\n// Selectors\r\nimport {\r\n permitApplicationIsSigned,\r\n permitIsIssued,\r\n burnPermitNumberById,\r\n permitIsExpiredSelector,\r\n} from '../selectors/burnPermitSelectors'\r\nimport { appIsOnlineSelector, } from '../selectors/selectors'\r\nimport { isLoadingDocuSignUrl, } from '../selectors/burnPermitSignatureSelectors'\r\nimport { contactConditionForPermitSelector, } from '../selectors/conditionsSelectors'\r\nimport { userCanEditPermitConditions, } from '../selectors/burnPermitPermissionSelectors'\r\n\r\n// Components\r\nimport ExternalLink from '../components/ExternalLink'\r\nimport { IssuePermit, PreviewPermit, } from '../components/Modals'\r\nimport PopoverButton from '../components/FormControls/PopoverButton'\r\nimport { ContactConditionList, ContactConditionForm, PermitConditions, } from '../components/Conditions'\r\nimport EditContactsAndConditions from '../components/Conditions/EditContactsAndConditions'\r\nimport withRouter from '../components/withRouter'\r\n\r\n\r\n\r\nconst ConditionWarning = \r\n

    1. This permit is not valid until fees are paid and permittee receives their validated permit. Permit may be suspended or modified any time when deemed necessary for the protection of life, property, air quality, or violation of permit conditions.

    \r\n

    2. Validated permit and any addendums/attachments must be on site while burning.

    \r\n

    3. Permittee shall comply with all requirements of Chapter 332-24 WAC, the Smoke Management Plan in effect at the time of burning, and any additional terms and conditions specified in writing by the Department.

    \r\n

    4. Permittee, by igniting a fire pursuant to this permit, accepts all responsibility for fire suppression costs that result from a violation of any of the conditions of this permit. If the fire escapes, regardless of cause, the permittee shall be responsible for paying for people and equipment for fire suppression as required by Chapter 76.04 RCW.

    \r\n

    5. Permittee shall call 1-800-323-BURN (2876) or visit each day of ignition prior to lighting any fire. The instructions provided for the county you are burning in, including fire danger and air quality burn bans, become a condition to this permit.

    \r\n

    6. No prohibited material shall be burned. Prohibited materials include: Garbage, dead animals, asphalt, petroleum products, paints, rubber products, plastics, treated wood, metal or any substance other than natural vegetation, which when burned releases toxic emissions, dense smoke, or odors.

    \r\n

    7. Fire ignited pursuant to this permit shall not create a nuisance from smoke, obscure visibility on public roads and highways, or endanger life and property through negligent spread of fire or pollutants.

    \r\n

    8. Permittee shall comply with the following checked conditions:

    \r\n
    \r\n\r\nconst SaveCancelButtons = props => {\r\n return <>\r\n {\r\n typeof props.onCancelClick === 'function'\r\n ? \r\n Cancel\r\n \r\n : null\r\n }\r\n \r\n Save\r\n \r\n \r\n}\r\n\r\nSaveCancelButtons.propTypes = {\r\n onCancelClick : func,\r\n onSaveClick : func,\r\n}\r\n\r\nSaveCancelButtons.defaultProps = {\r\n onSaveClick: () => {},\r\n}\r\n\r\nexport class PermitConditionsContainer extends React.Component {\r\n\r\n constructor (props) {\r\n super(props)\r\n\r\n this.state = {\r\n contactsAreDirty : false,\r\n editIssuedPermit : false,\r\n }\r\n\r\n const { SetPageTitle, } = this.props\r\n const { params, } = this.props\r\n\r\n SetPageTitle(`Burn Permit ${params.BurnPermitId} Conditions`)\r\n const hasId = params.BurnPermitId && !isNaN(params.BurnPermitId)\r\n if (hasId) {\r\n this.props.ConditionSetPermit(params.BurnPermitId)\r\n }\r\n }\r\n\r\n static propTypes = {\r\n // from withRouter HOC\r\n params: object,\r\n\r\n burnPermitId : number,\r\n // selector value\r\n BurnPermitNumber : string,\r\n isIssued : bool,\r\n isSigned : bool,\r\n isExpired : bool,\r\n applicationStatus : object,\r\n online : bool,\r\n IsLoadingDocuSignUrl : bool,\r\n // dispatch\r\n ConditionSetPermit : func,\r\n SetActiveConditions : func,\r\n SetPageTitle : func,\r\n Failure : func,\r\n SetRequiredContacts : func,\r\n userCanEditConditions : bool,\r\n ConditionContacts : shape({\r\n Contacts: arrayOf(object),\r\n }),\r\n }\r\n\r\n static defaultProps = {\r\n // selector\r\n userCanEditConditions : false,\r\n // dispatch \r\n ConditionSetPermit : null,\r\n SetActiveConditions : null,\r\n SetPageTitle : null,\r\n // route\r\n params : null,\r\n ConditionContacts : {\r\n Contacts: [],\r\n },\r\n }\r\n\r\n componentWillUnmount () {\r\n this.props.ConditionSetPermit()\r\n }\r\n\r\n componentDidUpdate (oldProps) {\r\n const { params, } = this.props\r\n const paramsChanged = !isEqual(oldProps.params, params)\r\n\r\n if (paramsChanged) {\r\n const hasId = params && !isNaN(params.BurnPermitId)\r\n if (hasId) {\r\n this.props.ConditionSetPermit(params.BurnPermitId)\r\n }\r\n }\r\n }\r\n\r\n submit = (updateIssuedConditions) => {\r\n const { selectedConditionValidity, } = this.state\r\n if (selectedConditionValidity && Object.values(selectedConditionValidity).includes(false)) {\r\n this.props.Failure('You must address all validation errors before you can save the conditions.')\r\n } else {\r\n this.props.SetActiveConditions(this.state.selectedConditionValues, updateIssuedConditions)\r\n }\r\n }\r\n\r\n submitContacts = (contacts) => {\r\n this.setState({ contactsAreDirty: false, }, () => {\r\n this.props.SetRequiredContacts(contacts, this.state.editIssuedPermit)\r\n })\r\n }\r\n\r\n onValuesChanged = (newValues) => {\r\n if (!newValues) {\r\n return\r\n }\r\n this.setState({ selectedConditionValues: newValues, })\r\n }\r\n\r\n onValidityChanged = (newValid) => {\r\n if (!newValid) {\r\n return\r\n }\r\n this.setState({ selectedConditionValidity: newValid, })\r\n }\r\n\r\n onContactChange = (isDirty) => {\r\n if (isDirty !== this.state.contactsAreDirty) {\r\n this.setState({ contactsAreDirty: isDirty, })\r\n }\r\n }\r\n\r\n toggleEditingContactsAndConditions = () => this.setState({ editIssuedPermit: !this.state.editIssuedPermit, })\r\n\r\n updateContactsAndConditions = () => {\r\n const updateIssuedConditions = this.state.editIssuedPermit\r\n this.setState({ editIssuedPermit: false, }, () => this.submit(updateIssuedConditions))\r\n }\r\n\r\n cancelEditingContactsAndConditions = () => {\r\n this.setState({ editIssuedPermit: false, selectedConditionValues: null, })\r\n }\r\n\r\n render () {\r\n const {\r\n ConditionContacts,\r\n isSigned,\r\n isIssued,\r\n isExpired,\r\n applicationStatus,\r\n online,\r\n userCanEditConditions,\r\n burnPermitId,\r\n BurnPermitNumber,\r\n IsLoadingDocuSignUrl,\r\n } = this.props\r\n\r\n const conditionsAreEditable = !(isIssued && isSigned)\r\n let readOnly = !online || !userCanEditConditions || !conditionsAreEditable || IsLoadingDocuSignUrl\r\n if (online && this.state.editIssuedPermit) {\r\n readOnly = false\r\n }\r\n let btns\r\n if (userCanEditConditions && (isIssued || conditionsAreEditable) && !isExpired) {\r\n if (!isIssued || (isIssued && this.state.editIssuedPermit)) {\r\n btns = \r\n }\r\n else {\r\n btns = \r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n

    \r\n Burn Permit {!conditionsAreEditable ? `Application ${burnPermitId}` : BurnPermitNumber} - Permit Conditions\r\n

    \r\n \r\n {\r\n btns && {btns}\r\n }\r\n
    \r\n {\r\n applicationStatus &&\r\n <>\r\n

    \r\n {applicationStatus.Status} {isSigned && '(Signed)'}\r\n \r\n \r\n \r\n \r\n

    {applicationStatus.Status}: {applicationStatus.StatusDescription}

    \r\n {\r\n isSigned &&\r\n

    This application has been digitally signed.\r\n See the Signature section of the permit application for more information.

    \r\n }\r\n \r\n }\r\n />\r\n

    \r\n \r\n }\r\n \r\n \r\n {\r\n !readOnly &&\r\n \r\n \r\n Required Contacts\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n Burning is Authorized Subject to the Following Conditions\r\n \r\n \r\n {\r\n readOnly && ConditionContacts && ConditionContacts.Contacts && ConditionContacts.Contacts.length > 0 &&\r\n \r\n \r\n

    Required Contacts

    \r\n \r\n \r\n
    \r\n }\r\n {\r\n readOnly && \r\n \r\n

    Conditions

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

    Failure to follow any of the conditions of this permit is a violation of this permit.

    \r\n { ConditionWarning }\r\n \r\n
    \r\n } \r\n \r\n {\r\n !online && conditionsAreEditable && \r\n

    Configuring Permit Conditions can only be performed while connected to the internet.

    \r\n \r\n }\r\n \r\n \r\n \r\n
    \r\n {\r\n userCanEditConditions &&\r\n \r\n {\r\n (conditionsAreEditable || this.state.editIssuedPermit) && \r\n { this.state.contactsAreDirty && Contact changes have not been saved}\r\n {\r\n !online && \r\n }\r\n \r\n \r\n \r\n \r\n }\r\n \r\n }\r\n
    \r\n
    \r\n {\r\n userCanEditConditions && conditionsAreEditable && this.state.editIssuedPermit &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nfunction mapStateToProps (state, props) {\r\n const { params, } = props\r\n const hasId = params && !isNaN(params.BurnPermitId)\r\n let activeBurnPermitId = null\r\n if (hasId) {\r\n activeBurnPermitId = params.BurnPermitId\r\n }\r\n const burnPermitId = parseInt(activeBurnPermitId)\r\n const online = appIsOnlineSelector(state)\r\n return {\r\n online,\r\n burnPermitId,\r\n BurnPermitNumber : burnPermitNumberById(state, burnPermitId),\r\n isIssued : permitIsIssued(state, activeBurnPermitId),\r\n isExpired : permitIsExpiredSelector(state),\r\n isSigned : permitApplicationIsSigned(state, activeBurnPermitId),\r\n ConditionContacts : contactConditionForPermitSelector(state, activeBurnPermitId),\r\n userCanEditConditions : userCanEditPermitConditions(state),\r\n IsLoadingDocuSignUrl : isLoadingDocuSignUrl(state),\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n ConditionSetPermit : ConditionActions.setPermitForConditions,\r\n SetActiveConditions : ConditionActions.setActivePermitConditions,\r\n SetRequiredContacts : ConditionActions.setContactConditions,\r\n SetPageTitle : AppActions.setPageTitle,\r\n Failure : ApiActions.failure,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(PermitConditionsContainer))\r\n","import React from 'react'\r\nimport { string, } from 'prop-types'\r\n\r\nconst TelPhone = ({ phoneNumber, }) => {\r\n let mailto = `tel:${phoneNumber}`\r\n return {phoneNumber}\r\n}\r\n\r\nTelPhone.propTypes = {\r\n phoneNumber: string,\r\n}\r\n\r\nTelPhone.defaultProps = {\r\n phoneNumber: '',\r\n}\r\n\r\nexport default TelPhone","// Libraries\r\nimport React from 'react'\r\nimport { Row, Col, Card, CardBody, Label, } from 'reactstrap'\r\nimport { object, } from 'prop-types'\r\n\r\n// Components\r\nimport MailTo from './MailTo'\r\nimport TelPhone from './TelPhone'\r\n\r\n\r\nconst RegionCard = props => {\r\n if (!props.region) {\r\n return No region data available.\r\n }\r\n const {\r\n RegionName,\r\n RegionPhone,\r\n RegionAddress,\r\n RegionEmail,\r\n RegionCounties,\r\n } = props.region\r\n return (\r\n \r\n \r\n \r\n \r\n

    {`${RegionName} Region`}

    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n {RegionAddress}\r\n
    \r\n \r\n \r\n

    Counties Included

    \r\n
      \r\n {\r\n RegionCounties.map((c, idx) => (\r\n
    • \r\n {c.CountyName}\r\n
    • \r\n ))\r\n }\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nRegionCard.propTypes = {\r\n region: object,\r\n}\r\n\r\nRegionCard.defaultProps = {\r\n region: null,\r\n}\r\n\r\nexport default RegionCard","// Libraries\nimport React, { useMemo, } from 'react'\nimport { useDispatch, useSelector, } from 'react-redux'\nimport { Container, Col, Row, } from 'reactstrap'\n\n// Selectors\nimport { appIsOnlineSelector, } from '../selectors/selectors'\nimport { allRegionsSelector, } from '../selectors/regionSelectors'\n\n// Reducers\nimport RegionActions from '../redux/RegionsRedux'\nimport AppActions from '../redux/AppRedux'\n\n// Components\nimport RegionCard from '../components/RegionCard'\n\n\nconst RegionListContainer = () => {\n\n const dispatch = useDispatch()\n const online = useSelector(appIsOnlineSelector)\n\n // mount effect\n React.useEffect(() => {\n dispatch(AppActions.setPageTitle('WA DNR Region Offices'))\n if (online) {\n dispatch(RegionActions.getAllRegions(true))\n }\n }, [ dispatch, online, ])\n\n const regions = useSelector(allRegionsSelector)\n\n const markup = useMemo(() => {\n if (Array.isArray(regions) === false) {\n return 'No regions found'\n }\n return regions.map((r) => (\n \n \n \n ))\n }, [ regions, ])\n return (\n \n

    DNR Region Offices

    \n \n {markup}\n \n
    \n )\n}\n\nexport default RegionListContainer\n","// Libraries\nimport React from 'react'\nimport { Link, } from 'react-router-dom'\nimport { Row, Col, FormGroup, Label, Input, Card, CardBody, CardHeader, Collapse, } from 'reactstrap'\nimport { array, object, number, bool, func, } from 'prop-types'\n\n// Components\nimport { CheckBoxes, } from '../components/FormControls'\n\n// Utilities\nimport { dateFormatter, } from '../utilities'\n\n\nconst basePropTypes = {\n burnRequest : object,\n burnedTons : number,\n burnedAcres : number,\n daysOfWeek : array,\n permitDays : array,\n}\n\nconst baseDefaultProps = {\n burnRequest : null,\n burnedTons : 0,\n burnedAcres : 0,\n daysOfWeek : [],\n permitDays : [],\n}\n\nconst BurnRequestSummaryCard = ({\n burnRequest,\n burnedTons,\n burnedAcres,\n daysOfWeek,\n permitDays,\n onClick,\n isOpen,\n}) => {\n if (!burnRequest) {\n return \n \n

    \n No Burn Request\n

    \n
    \n
    \n }\n let collapse\n if (typeof onClick === 'function') {\n collapse = \n }\n return \n \n

    \n \n Burn Request {burnRequest.BurnRequestId}\n \n

    \n { burnRequest.AutoGenerated ? (Created Automatically) : null}\n { collapse }\n
    \n \n \n \n \n \n
    \n}\n\nBurnRequestSummaryCard.propTypes = {\n ...basePropTypes,\n isOpen : bool,\n onClick : func,\n}\n\nBurnRequestSummaryCard.defaultProps = {\n ...baseDefaultProps,\n isOpen : true,\n onClick : () => { },\n}\n\n\n\nconst BurnRequestSummary = ({ burnRequest, daysOfWeek, }) => {\n let children = No Burn Request\n if (!burnRequest) {\n return null\n }\n\n const {\n PlannedIgnitionDate,\n PlannedIgnitionTime,\n PlannedIgnitionPeriod,\n ProposedBurnArea,\n TotalProposedBurnQuantity,\n DaysOfWeek,\n } = burnRequest\n \n const dateAndTime = `${dateFormatter(PlannedIgnitionDate, 'MM/DD/YYYY')} ${PlannedIgnitionTime}`\n if (burnRequest) {\n children = <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n return {children}\n}\n\nBurnRequestSummary.propTypes = { ...basePropTypes, }\n\nBurnRequestSummary.defaultProps = { ...baseDefaultProps, }\n\nexport { BurnRequestSummary, }\nexport default BurnRequestSummaryCard","// Libraries\r\nimport React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Link, } from 'react-router-dom'\r\nimport { object, number, func, bool, PropTypes, string, array, } from 'prop-types'\r\nimport { Container, Col, Card, CardBody, CardHeader, Row, Label, Collapse, } from 'reactstrap'\r\n\r\n// Components\r\nimport { PostBurnForm, } from '../components/Forms'\r\nimport BurnPermitSummaryCard from '../components/BurnPermitSummary'\r\nimport BurnRequestSummaryCard from '../components/BurnRequestSummary'\r\nimport PermitNumberSearch from '../components/PermitNumberSearch'\r\nimport { Select, } from '../components/FormControls'\r\nimport withRouter from '../components/withRouter'\r\n\r\n// Selectors\r\nimport { permitDaysSelector, burnPermitNumberById, burnTypesByBurnPermitId, } from '../selectors/burnPermitSelectors'\r\nimport {\r\n burnedAcresByPermitSelector,\r\n burnedTonsByPermitSelector,\r\n daysOfWeekCheckboxSelector,\r\n} from '../selectors/selectors'\r\nimport { \r\n postBurnByRequestIdSelector, \r\n postBurnLoadingSelector,\r\n postBurnDDLSelector,\r\n activePostBurnRequestSelector,\r\n havePermitDataForPostBurn,\r\n haveRequestDataForPostBurn,\r\n activePostBurnIds,\r\n activePostBurnIsLocal,\r\n submittingPostburnsSelector,\r\n} from '../selectors/postBurnSelectors'\r\n\r\n// Redux\r\nimport AppActions from '../redux/AppRedux'\r\nimport PostBurnActions from '../redux/PostBurnRedux'\r\n\r\n// Utilities\r\nimport { dateFormatter, } from '../utilities'\r\n\r\n\r\nconst paramsShape = PropTypes.shape({\r\n BurnPermitId : PropTypes.oneOfType([ number, string, ]),\r\n BurnRequestId : PropTypes.oneOfType([ number, string, ]),\r\n PostBurnId : PropTypes.oneOfType([ number, string, ]),\r\n})\r\n\r\nconst noopAction = () => {\r\n console.error('An action was not executed')\r\n}\r\n\r\nexport class PostBurnContainer extends React.Component {\r\n static propTypes = {\r\n // from withRouter HOC\r\n navigate : func,\r\n location : object,\r\n params : paramsShape,\r\n \r\n // from selectors\r\n BurnPermitId : PropTypes.oneOfType([ number, string, ]),\r\n BurnPermitNumber : string,\r\n BurnRequest : object,\r\n BurnRequestId : PropTypes.oneOfType([ number, string, ]),\r\n BurnedAcres : number,\r\n BurnedTons : number,\r\n DaysOfWeek : PropTypes.arrayOf(object),\r\n IsLoading : bool,\r\n PermitDays : PropTypes.arrayOf(number),\r\n BurnRequestsForSelect : PropTypes.arrayOf(object),\r\n PostBurn : object,\r\n PostBurnIsSubmitting : bool,\r\n BurnTypes : array,\r\n HaveRequestData : bool,\r\n HavePermitData : bool,\r\n PostBurnId : number,\r\n PostBurnUsesRequest : bool,\r\n PostBurnIsLocal : bool,\r\n PermitFailedToLoad : bool,\r\n online : bool,\r\n // actions\r\n CancelPostBurnSubmit : func,\r\n ClearPostBurnPrompts : func,\r\n CreatePostBurn : func,\r\n SetPageTitle : func,\r\n SetPostBurnPermit : func,\r\n UpdatePostBurn : func,\r\n InitializeForm : func,\r\n ClearPermitLoadFail : func,\r\n SetPostBurnUsesRequest : func,\r\n }\r\n\r\n static defaultProps = {\r\n location : {},\r\n params : {},\r\n BurnPermitId : -1,\r\n BurnRequest : null,\r\n BurnRequestId : -1,\r\n BurnedAcres : 0,\r\n BurnedTons : 0,\r\n DaysOfWeek : [],\r\n IsLoading : false,\r\n PermitDays : [],\r\n BurnRequestsForSelect : [],\r\n PostBurn : null,\r\n BurnTypes : [],\r\n ClearPostBurnPrompts : noopAction,\r\n CreatePostBurn : noopAction,\r\n SetPageTitle : noopAction,\r\n SetPostBurnPermit : noopAction,\r\n UpdatePostBurn : noopAction,\r\n HavePermitData : false,\r\n HaveRequestData : false,\r\n }\r\n\r\n state = {\r\n permitIsOpen : false,\r\n requestIsOpen : false,\r\n requestSelectIsOpen : true,\r\n }\r\n\r\n updateRouteParams = () => {\r\n const { BurnPermitId, BurnRequestId, PostBurnId, PostBurn, PostBurnUsesRequest, } = this.props\r\n const { pathname, } = this.props.location\r\n let route = '', newTitle = ''\r\n\r\n if (PostBurnId > 0) {\r\n if (PostBurn && PostBurn.IsLocal === true) {\r\n if (BurnRequestId > 0) {\r\n newTitle = `Burn Request #${BurnRequestId} - Post Burn`\r\n route = `/burn-requests/${BurnRequestId}/postburn`\r\n } else if (!PostBurnUsesRequest && BurnPermitId > 0) {\r\n newTitle = `Permit #${BurnPermitId} - Post Burn`\r\n route = `/permits/${BurnPermitId}/postburn`\r\n } else {\r\n newTitle = `Post Burn #${PostBurnId}`\r\n route = `/post-burns/${PostBurnId}`\r\n }\r\n } else {\r\n newTitle = `Post Burn #${PostBurnId}`\r\n route = `/post-burns/${PostBurnId}`\r\n }\r\n }\r\n else if (BurnRequestId > 0) {\r\n newTitle = `Burn Request #${BurnRequestId} - Post Burn`\r\n route = `/burn-requests/${BurnRequestId}/postburn`\r\n } else if (BurnPermitId > 0) {\r\n newTitle = `Permit #${BurnPermitId} - Post Burn`\r\n route = `/permits/${BurnPermitId}/postburn`\r\n } else {\r\n newTitle = 'New Post Burn'\r\n route = '/post-burns/new'\r\n }\r\n if (pathname !== route) {\r\n this.props.SetPageTitle(newTitle)\r\n this.props.navigate(route)\r\n }\r\n }\r\n\r\n parseRouteParams = () => {\r\n const { InitializeForm, } = this.props\r\n const { BurnPermitId, BurnRequestId, PostBurnId, } = this.props.params\r\n \r\n let pmtId = (BurnPermitId && BurnPermitId > 0) ? BurnPermitId : -1\r\n let reqId = (BurnRequestId && BurnRequestId > 0) ? BurnRequestId : -1\r\n let pbId = (PostBurnId && PostBurnId > 0) ? PostBurnId : -1\r\n\r\n InitializeForm(pmtId, reqId, pbId)\r\n }\r\n\r\n componentDidMount () {\r\n this.props.ClearPostBurnPrompts()\r\n this.parseRouteParams()\r\n }\r\n\r\n componentDidUpdate (prevProps) {\r\n const { BurnRequestId, PostBurnUsesRequest, PostBurn, BurnRequest, } = this.props\r\n\r\n let changeRoute = false\r\n const { key, pathname, } = this.props.location\r\n\r\n if (prevProps.location.key !== key && pathname.indexOf('new') > 0) {\r\n this.props.InitializeForm(-1, -1, -1)\r\n }\r\n\r\n if (prevProps.BurnPermitId !== this.props.BurnPermitId && this.props.BurnPermitId > 0) {\r\n this.setState({ permitIsOpen: true, })\r\n changeRoute = true\r\n }\r\n if (!prevProps.BurnRequest && BurnRequest) {\r\n changeRoute = true\r\n }\r\n if (!prevProps.PostBurn && PostBurn) {\r\n if (!this.props.PostBurnIsLocal && !PostBurn.IsLocal) {\r\n changeRoute = true\r\n }\r\n }\r\n if (PostBurnUsesRequest) {\r\n if (prevProps.BurnRequestId !== BurnRequestId && Number.isInteger(BurnRequestId) && BurnRequestId > 0) {\r\n changeRoute = true\r\n }\r\n }\r\n if (changeRoute) {\r\n this.updateRouteParams()\r\n }\r\n } \r\n\r\n componentWillUnmount () {\r\n this.props.InitializeForm(-1, -1, -1)\r\n this.props.ClearPostBurnPrompts()\r\n }\r\n\r\n onPermitSearchChanged = permitNumber => {\r\n if (this.props.PermitFailedToLoad){\r\n this.props.ClearPermitLoadFail()\r\n }\r\n this.setState({ BurnPermitNumber: permitNumber, BurnPermitNumberError: '', })\r\n }\r\n\r\n doPermitSearch = permitNumber => {\r\n if (permitNumber) {\r\n this.props.SetPostBurnPermit(permitNumber)\r\n return\r\n }\r\n this.setState({ BurnPermitNumberError: 'You must provide a valid Burn Permit Number.', })\r\n }\r\n\r\n submitPostBurn = (values) => {\r\n const {\r\n PostBurn,\r\n UpdatePostBurn,\r\n CreatePostBurn,\r\n BurnPermitId,\r\n } = this.props\r\n\r\n // clean up the post burn object\r\n let BurnTime = values.BurnTime.toString()\r\n if (BurnTime) {\r\n if (BurnTime.length < 4) {\r\n BurnTime = `0000${BurnTime}`.substring(-4)\r\n BurnTime = BurnTime.substring(BurnTime.length - 4)\r\n }\r\n const hours = BurnTime.slice(0, -2)\r\n const mins = BurnTime.slice(-2)\r\n values['BurnTime'] = `${hours}:${mins}:00`\r\n }\r\n\r\n if ((!values.BurnPermitId || values.BurnPermitId < 0) && BurnPermitId) {\r\n values['BurnPermitId'] = BurnPermitId\r\n }\r\n\r\n\r\n if (PostBurn && !PostBurn.IsLocal && PostBurn.PostBurnId) {\r\n UpdatePostBurn(PostBurn.PostBurnId, values)\r\n }\r\n else if (BurnPermitId) {\r\n CreatePostBurn(values)\r\n }\r\n }\r\n\r\n selectedRequestChanged = (e) => {\r\n const { value, } = e.target\r\n const { \r\n SetPostBurnUsesRequest, \r\n BurnPermitId, \r\n InitializeForm,\r\n } = this.props\r\n \r\n if (value === 'norequest'){\r\n SetPostBurnUsesRequest(false)\r\n this.updateRouteParams()\r\n return\r\n }\r\n\r\n if (isNaN(value)) {\r\n return\r\n }\r\n\r\n // re-initialize the form with the burn request id and no initial post burn\r\n InitializeForm(BurnPermitId, value, -1)\r\n this.setState({ requestIsOpen: true, })\r\n }\r\n\r\n renderRequestSelector = () => {\r\n const { BurnPermitId, BurnRequestsForSelect, PostBurnUsesRequest, } = this.props\r\n if (this.props.IsLoading) {\r\n return Loading Burn Requests...\r\n }\r\n if (!BurnRequestsForSelect || BurnRequestsForSelect.length === 0) {\r\n if (!BurnPermitId) {\r\n return Loading...\r\n }\r\n return No Burn Requests submitted for Burn Permit {BurnPermitId}\r\n }\r\n const selectedRequest = PostBurnUsesRequest ? this.props.BurnRequestId : 'norequest'\r\n return <>\r\n \r\n \r\n \r\n }\r\n\r\n togglePermitCard = () => this.setState({ permitIsOpen: !this.state.permitIsOpen, })\r\n\r\n toggleRequestCard = () => this.setState({ requestIsOpen: !this.state.requestIsOpen, })\r\n\r\n toggleRequestSelectCard = () => this.setState({ requestSelectIsOpen: !this.state.requestSelectIsOpen, })\r\n\r\n renderPostBurn = () => {\r\n const {\r\n BurnRequest,\r\n PostBurn,\r\n BurnPermitId,\r\n CancelPostBurnSubmit,\r\n PostBurnIsSubmitting,\r\n BurnTypes,\r\n } = this.props\r\n \r\n if (!PostBurn) {\r\n return

    Please wait while we gather the Burn Permit, Burn Request and Post Burn data.

    \r\n }\r\n if (PostBurn.PlannedIgnitionDate && dateFormatter(PostBurn.PlannedIgnitionDate).isAfter(Date.now())) {\r\n return

    You cannot submit Post Burn information for a future Burn Request.

    \r\n }\r\n return \r\n }\r\n\r\n render () {\r\n const { permitIsOpen, requestIsOpen, } = this.state\r\n const { BurnPermitId, BurnRequestId, } = this.props\r\n const {\r\n BurnPermitNumber,\r\n BurnedTons,\r\n BurnedAcres,\r\n DaysOfWeek,\r\n PermitDays,\r\n BurnRequest,\r\n PostBurn,\r\n PostBurnUsesRequest,\r\n } = this.props\r\n const permitUrl = `/permits/${BurnPermitId}`\r\n let children, header, showPostBurnForm = false\r\n if (PostBurn) {\r\n if ((BurnRequestId > 0 && PostBurnUsesRequest) || !PostBurnUsesRequest){\r\n showPostBurnForm = true\r\n }\r\n }\r\n if (BurnPermitId < 0) {\r\n header =

    Enter Post Burn Report

    \r\n children = \r\n \r\n } else {\r\n let burnRequestCard = null\r\n let collapse\r\n if (typeof onClick === 'function') {\r\n collapse = \r\n }\r\n let burnRequestSelector = \r\n Select a Burn Request{collapse}\r\n \r\n \r\n \r\n \r\n Select a Burn Request. If a Burn Request has not been submitted for the Burn, select No Request.\r\n \r\n \r\n \r\n { this.renderRequestSelector() }\r\n \r\n \r\n \r\n \r\n if (BurnRequest || !PostBurnUsesRequest) {\r\n burnRequestCard = \r\n } else if (BurnRequestId > 0) {\r\n burnRequestCard = Loading Burn Request...\r\n }\r\n\r\n header =

    Burn Permit {BurnPermitNumber || BurnPermitId} - Post Burn

    \r\n children = <>\r\n \r\n \r\n {\r\n // (BurnPermitId && HavePermitData) &&\r\n BurnPermitId &&\r\n \r\n }\r\n \r\n \r\n \r\n \r\n {burnRequestSelector}\r\n \r\n \r\n {burnRequestCard}\r\n \r\n \r\n \r\n \r\n {\r\n (showPostBurnForm) &&\r\n \r\n \r\n \r\n \r\n {PostBurn && ((PostBurn.ConsumedTons === 0 && PostBurn.BurnDate) || PostBurn.DidNotBurn) ? 'Did Not Burn Reason' : 'Post-Burn Information'}\r\n \r\n \r\n {PostBurn && ((PostBurn.ConsumedTons === 0 && PostBurn.BurnDate) || PostBurn.DidNotBurn) ? (PostBurn.DidNotBurnReason === '') ? 'No Reason was Listed' : PostBurn.DidNotBurnReason : this.renderPostBurn() }\r\n \r\n \r\n \r\n \r\n }\r\n \r\n }\r\n return \r\n {header}\r\n {children}\r\n \r\n }\r\n}\r\n\r\nfunction mapStateToProps (state) {\r\n const { BurnPermitId, BurnRequestId, PostBurnId, } = activePostBurnIds(state)\r\n const PostBurn = postBurnByRequestIdSelector(state)\r\n const submittingPostBurns = submittingPostburnsSelector(state)\r\n const PostBurnIsSubmitting = submittingPostBurns.includes(PostBurnId)\r\n\r\n return {\r\n PostBurnId,\r\n BurnPermitId,\r\n BurnRequestId,\r\n PostBurn,\r\n PostBurnIsLocal : activePostBurnIsLocal(state),\r\n BurnPermitNumber : burnPermitNumberById(state, BurnPermitId),\r\n PostBurnIsSubmitting,\r\n PostBurnUsesRequest : state.PostBurn.PostBurnUsesRequest,\r\n BurnTypes : burnTypesByBurnPermitId(state, BurnPermitId),\r\n BurnRequest : activePostBurnRequestSelector(state),\r\n BurnedAcres : burnedAcresByPermitSelector(state, BurnPermitId),\r\n BurnedTons : burnedTonsByPermitSelector(state, BurnPermitId),\r\n DaysOfWeek : daysOfWeekCheckboxSelector(state),\r\n IsLoading : postBurnLoadingSelector(state),\r\n PermitDays : permitDaysSelector(state, BurnPermitId),\r\n BurnRequestsForSelect : postBurnDDLSelector(state),\r\n HavePermitData : havePermitDataForPostBurn(state),\r\n HaveRequestData : haveRequestDataForPostBurn(state),\r\n online : state.offline.online,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n SetPageTitle : AppActions.setPageTitle,\r\n ClearPostBurnPrompts : PostBurnActions.clearPostBurnPrompt,\r\n // api calls\r\n CancelPostBurnSubmit : PostBurnActions.cancelPostBurnSubmit,\r\n CreatePostBurn : PostBurnActions.createPostBurn,\r\n UpdatePostBurn : PostBurnActions.updatePostBurn,\r\n // form meta actions\r\n SetPostBurnPermit : PostBurnActions.setPostBurnPermitByNumber,\r\n SetPostBurnUsesRequest : PostBurnActions.postBurnUseRequest,\r\n InitializeForm : PostBurnActions.initializePostBurnForm,\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(PostBurnContainer))\r\n","// Libraries\nimport React from 'react'\nimport { Card, CardHeader, CardBody, } from 'reactstrap'\nimport { string, } from 'prop-types'\nimport { Link, } from 'react-router-dom'\n\n// Components\nimport AuditData from '../AuditData'\n\n\nconst ReportCard = ({ Name, Description, Id, CreatedBy, CreatedDate, ModifiedBy, ModifiedDate, }) => {\n return \n {Name}\n \n

    {Description || 'No report description.'}

    \n View Report\n \n
    \n
    \n}\n\nReportCard.propTypes = {\n Name : string,\n Description : string,\n Id : string,\n CreatedBy : string,\n CreatedDate : string,\n ModifiedBy : string,\n ModifiedDate : string,\n}\n\nexport default ReportCard","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Container, Row, Col, CardText, } from 'reactstrap'\nimport { func, array, bool, } from 'prop-types'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport ReportActions from '../redux/ReportsRedux'\n\n// Components\nimport ReportCard from '../components/Reports/ReportCard'\nimport ReportMessageCard from '../components/Reports/ReportMessageCard'\n\n\nexport class ReportListContainer extends React.Component {\n static propTypes = {\n online : bool,\n SetPageTitle : func,\n GetReports : func,\n reports : array,\n reportsLoading : bool,\n }\n\n static defaultProps = {\n reports: [],\n }\n\n componentDidMount () {\n const { online, SetPageTitle, GetReports, } = this.props\n SetPageTitle('Burn Portal Reports')\n if (online) {\n GetReports()\n }\n }\n\n render () {\n const { online, reportsLoading, reports, } = this.props\n let children\n if (reportsLoading !== false) {\n children = \n }\n else if (reportsLoading === false && reports.length === 0) {\n children = \n }\n else {\n children = reports.map(r => {\n return \n \n \n })\n }\n if (!online) {\n return \n

    Reports

    \n \n
    \n }\n return \n

    Reports

    \n Reports not loading? Refresh your browser to try again.\n {children}\n
    \n }\n}\n\nfunction mapStateToProps (state) {\n const { reportsLoading, reports, } = state.Reports\n const { online, } = state.offline\n return {\n online,\n reports,\n reportsLoading,\n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n GetReports : ReportActions.getReports,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ReportListContainer)","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { object, func, bool, arrayOf, number, } from 'prop-types'\nimport { Container, Card, CardBody, Col, Row, } from 'reactstrap'\n\n// Selectors\nimport { \n ruleUpdatedSelector, \n ruleUpdatingSelector, \n ruleUpdateFailedSelector, \n rulesLoadingSelector, \n rulesSelector,\n} from '../selectors/ruleSelectors'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport RuleActions from '../redux/RulesRedux'\n\n// Components\nimport { RuleListForm, } from '../components/Forms'\n\nexport class RulesContainer extends React.Component {\n static propTypes = {\n online : bool,\n SetPageTitle : func,\n isAdmin : bool,\n rules : arrayOf(object),\n UpdateRule : func,\n rulesUpdated : arrayOf(number),\n rulesUpdating : arrayOf(number),\n rulesUpdateFailed : arrayOf(number),\n ResetRuleState : func,\n GetRules : func,\n }\n \n static defaultProps = {\n SetPageTitle : () => {},\n rules : [],\n UpdateRule : () => {},\n rulesUpdating : [],\n rulesUpdated : [],\n rulesUpdateFailed : [],\n ResetRuleState : () => {},\n GetRules : () => {},\n isAdmin : false,\n }\n\n state = {\n editing: [],\n }\n\n componentDidMount () {\n this.props.SetPageTitle('System Rules & Settings')\n if (this.props.online) {\n this.props.GetRules()\n }\n }\n \n render () {\n const {\n online,\n isAdmin,\n rules, \n UpdateRule, \n rulesUpdated,\n rulesUpdating,\n rulesUpdateFailed,\n ResetRuleState,\n } = this.props\n\n return (\n \n \n

    System Rules & Settings

    \n
    \n \n \n \n \n { !online &&

    Editing Rules and Settings requires an internet connection.

    }\n \n
    \n
    \n \n
    \n
    \n )\n }\n}\n\nfunction mapStateToProps (state) {\n const { online, } = state.offline\n return {\n online,\n rules : rulesSelector(state),\n rulesLoading : rulesLoadingSelector(state),\n rulesUpdating : ruleUpdatingSelector(state),\n rulesUpdated : ruleUpdatedSelector(state),\n rulesUpdateFailed : ruleUpdateFailedSelector(state),\n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n GetRules : RuleActions.getRules,\n UpdateRule : RuleActions.updateRule,\n ResetRuleState : RuleActions.resetRuleLoadState,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(RulesContainer)\n","/* eslint-disable jsx-a11y/no-autofocus */\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { isEqual, isEmpty, } from 'lodash'\nimport { func, array, object, number, bool, } from 'prop-types'\nimport { Container, Row, Col, Card, CardBody, Input, Button, Alert, } from 'reactstrap'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport MergeActions from '../redux/MergeRedux'\nimport PersonActions from '../redux/PersonRedux'\n\n// Components\nimport { AutoComplete, PopoverButton, } from '../components/FormControls'\nimport { MergeForm, } from '../components/Forms'\n\n// Selectors\nimport { peopleForMergeSelect, allPeopleForMerge, personForMerge, } from '../selectors/personSelectors'\n\n// Utilities\nimport stopEvent from '../utilities/stopEvent'\n\n\nconst MergePermitsWarning = ({ mergedPerson, }) => {\n if (\n !mergedPerson\n || ('Permits' in mergedPerson) === false\n || !Array.isArray(mergedPerson.Permits.Text)\n || !mergedPerson.Permits.Warning\n ) {\n return null\n }\n return {mergedPerson.Permits.Warning}\n}\n\nMergePermitsWarning.propTypes = {\n mergedPerson: object,\n}\n\nexport class MergePersonContainer extends React.Component {\n \n constructor (props) {\n super(props)\n\n this.props.GetDataForPeopleMerge()\n this.props.SetPageTitle('Merge People')\n\n const initialState = {\n personOne : '',\n personTwo : '',\n personTwoSearch : '',\n mergedPerson : null,\n checkAllTarget : null,\n checkedIds : [],\n focusField : '',\n }\n\n this.initialState = { ...initialState, }\n this.state = { ...initialState, }\n\n this.checkAll = this.checkAll.bind(this)\n this.resetChoices = this.resetChoices.bind(this)\n }\n\n static propTypes = {\n history : object,\n PeopleForSelect : array,\n People : array,\n SetPageTitle : func,\n GetDataForPeopleMerge : func,\n GetPersonDataForMerge : func,\n MergePeople : func,\n ClearPersonIds : func,\n PersonOneId : number,\n PersonOneObj : object,\n PersonTwoId : number,\n PersonTwoObj : object,\n SetPersonOneId : func,\n SetPersonTwoId : func,\n isFetchingData : bool,\n }\n\n minCharactersToEnter = 3\n\n componentDidMount () {\n if (!isEmpty(this.props.PersonOneObj)) {\n const personOne = {\n value : this.props.PersonOneId,\n label : `${this.props.PersonOneId}: ${this.props.PersonOneObj.PersonFirstName.Value} ${this.props.PersonOneObj.PersonLastName.Value}`,\n }\n this.setState({\n personOne,\n personTwoSearch: this.props.PersonOneObj.PersonLastName.Value,\n }, () => {\n this.updateSelectedPerson('personOne', this.props.PersonOneId, this.props.PersonOneObj)\n })\n }\n }\n\n componentWillUnmount () {\n this.props.ClearPersonIds()\n }\n\n componentDidUpdate (prevProps) {\n const { PersonOneId, PersonOneObj, PersonTwoId, PersonTwoObj, } = this.props\n if (!isEqual(prevProps.PersonOneObj, PersonOneObj) && !isEmpty(PersonOneObj)) {\n this.updateSelectedPerson('personOne', PersonOneId, PersonOneObj, true)\n // Force the reset of PersonTwo if they change PersonOne and PersonTwo exists\n if (PersonOneId > 0 && !isEmpty(PersonTwoObj)) {\n this.updateSelectedPerson('personTwo', PersonTwoId, PersonTwoObj, true)\n }\n }\n if (!isEqual(prevProps.PersonTwoObj, PersonTwoObj) && !isEmpty(PersonTwoObj)) {\n // Force the reset of PersonOne if they change PersonTwo and PersonOne exists\n if (PersonOneId > 0 && !isEmpty(PersonOneObj)) {\n this.updateSelectedPerson('personOne', PersonOneId, PersonOneObj, true)\n }\n this.updateSelectedPerson('personTwo', PersonTwoId, PersonTwoObj)\n }\n }\n\n personChange = evt => {\n const { value, name, } = evt.target\n const newState = { ...this.state, }\n newState[name] = value\n if (!value) {\n newState[`${name}Obj`] = null\n if (!newState.personOneObj && !newState.personTwoObj) {\n newState.mergedPerson = null\n }\n }\n \n this.setState(newState)\n }\n\n updateMergedPersonArrays = (mergedPerson) => {\n const { PersonOneObj, PersonTwoObj, } = this.props\n\n mergedPerson.Addresses.Text = [ ...(PersonOneObj ? PersonOneObj.Addresses.Text : []), ...(PersonTwoObj ? PersonTwoObj.Addresses.Text: []), ]\n mergedPerson.Addresses.Value = [ ...(PersonOneObj ? PersonOneObj.Addresses.Value : []), ...(PersonTwoObj ? PersonTwoObj.Addresses.Value: []), ]\n\n mergedPerson.Phones.Text = [ ...(PersonOneObj ? PersonOneObj.Phones.Text : []), ...(PersonTwoObj ? PersonTwoObj.Phones.Text: []), ]\n mergedPerson.Phones.Value = [ ...(PersonOneObj ? PersonOneObj.Phones.Value : []), ...(PersonTwoObj ? PersonTwoObj.Phones.Value: []), ]\n\n mergedPerson.Permits.Warning = PersonOneObj ? PersonOneObj.Permits.Warning : PersonTwoObj ? PersonTwoObj.Permits.Warning : null\n mergedPerson.Permits.Text = [ ...(PersonOneObj ? PersonOneObj.Permits.Text : []), ...(PersonTwoObj ? PersonTwoObj.Permits.Text: []), ]\n mergedPerson.Permits.Value = [ ...(PersonOneObj ? PersonOneObj.Permits.Value : []), ...(PersonTwoObj ? PersonTwoObj.Permits.Value: []), ]\n\n return { ...mergedPerson, }\n }\n\n getEmptyPerson = person => {\n const personClone = { ...person, }\n const keys = Object.keys(personClone)\n const newPerson = { }\n for(let i = 0, len = keys.length; i < len; i++) {\n const personProp = keys[i]\n const personValue = personClone[personProp]\n newPerson[personProp] = { ...personValue, }\n newPerson[personProp].Text = Array.isArray(personValue.Text) ? [] : null\n newPerson[personProp].Value = Array.isArray(personValue.Value) ? [] : null\n newPerson[personProp].Warning = ''\n }\n newPerson.Addresses = { Label: 'Addresses', Text: [], Value: [], }\n newPerson.Phones = { Label: 'Phones', Text: [], Value: [], }\n return newPerson\n }\n\n personOneSelect = ({ label, value, }) => {\n this.props.GetPersonDataForMerge(value)\n this.props.SetPersonOneId(value)\n const mergedPerson = this.getEmptyPerson(this.state.mergedPerson)\n this.setState({\n personOne : { label, value, },\n mergedPerson,\n checkAllTarget : '',\n checkedIds : [],\n focusField : 'personTwo',\n })\n }\n\n personTwoSelect = ({ label, value, }) => {\n this.props.GetPersonDataForMerge(value)\n this.props.SetPersonTwoId(value)\n const mergedPerson = this.getEmptyPerson(this.state.mergedPerson)\n // Clear it out so it can be focused again if someone changes the first person input\n this.setState({\n personTwo : { label, value, },\n mergedPerson,\n checkAllTarget : '',\n checkedIds : [],\n focusField : '',\n })\n }\n\n updateSelectedPerson = (personKey, personId, personObj, forceUpdate = false) => {\n if (personObj === null) {\n return\n }\n let { mergedPerson, } = this.state\n if (isEmpty(mergedPerson) || forceUpdate) {\n mergedPerson = this.getEmptyPerson(personObj)\n }\n\n mergedPerson = this.updateMergedPersonArrays(mergedPerson)\n const newState = { mergedPerson: { ...mergedPerson, }, }\n newState[`${personKey}Id`] = personId\n newState[`${personKey}Obj`] = { ...personObj, }\n this.setState(newState)\n }\n\n setMergedValue = evt => {\n const { mergedPerson, } = this.state\n const { id, name, value, dataset, } = evt.target\n mergedPerson[name] = { Value: value, Label: dataset.label, Text: dataset.text, }\n let checkedIds = [ ...this.state.checkedIds, ]\n const checkedInputIdx = checkedIds.findIndex(c => c.indexOf(name) > -1)\n if (checkedInputIdx > -1) {\n checkedIds.splice(checkedInputIdx, 1)\n }\n if (name === 'PersonId') {\n const { personOneId, personOneObj, personTwoId, personTwoObj, } = this.state\n if (personOneId === parseInt(value)) {\n mergedPerson['UserName'] = { ...personOneObj.UserName, }\n }\n else if (personTwoId === parseInt(value)) {\n mergedPerson['UserName'] = { ...personTwoObj.UserName, }\n }\n }\n this.setState({\n mergedPerson,\n checkAllTarget : null,\n checkedIds : [ ...checkedIds, id, ],\n }, this.checkForMismatchingPersonType)\n }\n\n reset = evt => {\n stopEvent(evt)\n this.setState({ ...this.initialState, }, this.props.ClearPersonIds)\n }\n\n resetChoices (evt) {\n stopEvent(evt)\n\n // Clear the selected inputs for the ultimate merged person\n let { mergedPerson, } = this.state\n mergedPerson = this.getEmptyPerson(mergedPerson)\n // But restore the addresses and phones\n mergedPerson = this.updateMergedPersonArrays(mergedPerson)\n \n // Clear out any warnings\n const { personOneObj, personTwoObj, } = this.state\n const keys = Object.keys(mergedPerson)\n for(let i = 0, len = keys.length; i < len; i++) {\n const personProp = keys[i]\n personOneObj[personProp].Warning = ''\n personTwoObj[personProp].Warning = ''\n }\n \n this.setState({\n checkAllTarget : null,\n checkedIds : [],\n mergedPerson,\n personOneObj,\n personTwoObj,\n })\n }\n\n mergePeople = evt => {\n stopEvent(evt)\n const { mergedPerson, personOneId, personTwoId, } = this.state\n \n const personKeys = Object.keys(mergedPerson)\n const person = personKeys.reduce((p, k) => {\n p[k] = mergedPerson[k].Value\n return p\n }, {})\n // Identify which person Id will be tagged as being merged\n // The person id that is not in the merged person object will be the one to updated to be tagged\n // as merged and will be readonly from here on out.\n const mergedPersonId = parseInt(mergedPerson.PersonId.Value) === parseInt(personOneId) ? personTwoId : personOneId\n this.props.MergePeople(person, mergedPersonId)\n }\n\n checkForMismatchingPersonType = () => {\n const { personOneObj, personTwoObj, mergedPerson, } = this.state\n let warning = null\n if (personOneObj['PersonTypeId'].Text !== personTwoObj['PersonTypeId'].Text) {\n warning = 'Warning: You are choosing to merge People of different types.'\n personOneObj['PersonTypeId'].Warning = warning\n personTwoObj['PersonTypeId'].Warning = warning\n mergedPerson['PersonTypeId'].Warning = warning\n this.setState({ personOneObj, personTwoObj, mergedPerson, })\n }\n else if (personOneObj['PersonTypeId'].Warning || personTwoObj['PersonTypeId'].Warning) {\n personOneObj['PersonTypeId'].Warning = warning\n personTwoObj['PersonTypeId'].Warning = warning\n mergedPerson['PersonTypeId'].Warning = warning\n this.setState({ personOneObj, personTwoObj, mergedPerson, })\n }\n }\n\n checkAll (evt) {\n stopEvent(evt)\n const { target, } = evt.target.dataset\n const mergedPerson = {\n ...this.state[target],\n Addresses : this.state.mergedPerson.Addresses,\n Phones : this.state.mergedPerson.Phones,\n Permits : this.state.mergedPerson.Permits,\n }\n const keys = Object.keys(mergedPerson)\n // When choosing all props from one object, default any null\n // values to be empty strings\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i]\n if (mergedPerson[key].Value !== null) {\n continue\n }\n mergedPerson[key].Value = ''\n }\n const objId = mergedPerson.PersonId.Value\n const checkedIds = keys.map(k => `${k}-${objId}`)\n this.setState({\n checkAllTarget: target,\n mergedPerson, checkedIds,\n }, this.checkForMismatchingPersonType)\n }\n\n mergedPersonInput = mergedPerson => {\n let text = ''\n if (!mergedPerson) {\n return text\n }\n if (mergedPerson.PersonId && mergedPerson.PersonId.Value) {\n text += mergedPerson.PersonId.Value + ': '\n }\n if (mergedPerson.PersonFirstName && mergedPerson.PersonFirstName.Value) {\n text += mergedPerson.PersonFirstName.Value + ' '\n }\n if (mergedPerson.PersonLastName && mergedPerson.PersonLastName.Value) {\n text += mergedPerson.PersonLastName.Value\n }\n return text\n }\n\n render () {\n const {\n personOne,\n personTwo,\n personTwoSearch,\n mergedPerson,\n checkAllTarget,\n checkedIds,\n } = this.state\n const {\n PeopleForSelect,\n PersonOneId,\n PersonOneObj,\n PersonTwoId,\n PersonTwoObj,\n isFetchingData,\n } = this.props\n\n // Once all values are set, then merging is enabled\n let someValuesAreNotChosen = true\n if (mergedPerson && !isEmpty(mergedPerson)) {\n someValuesAreNotChosen = Object.entries(mergedPerson).some(e => e[1].Value === null)\n }\n\n if (!personOne && PersonOneId > 0) {\n return null\n }\n\n return \n

    People - Merge

    \n \n \n

    \n Use the autocomplete controls below to locate the two Person records you wish to merge. All related data such as Addresses and Phones will be automatically merged.\n Once these records are merged, they cannot be unmerged. Only Person records that are not associated with a DNR user can be merged.\n

    \n \n \n

    Find Person 1

    \n p.Value !== PersonTwoId)}\n value={personOne}\n onChange={this.personOneSelect}\n minCharactersToEnter={this.minCharactersToEnter}\n />\n {\n PersonOneId && PersonOneObj &&\n \n }\n \n \n

    Find Person 2

    \n p.Value !== PersonOneId)}\n value={personTwo}\n searchValue={personTwoSearch}\n onChange={this.personTwoSelect}\n minCharactersToEnter={this.minCharactersToEnter}\n defaultMenuIsOpen={!!personTwoSearch}\n />\n {\n PersonTwoId && PersonTwoObj &&\n \n }\n \n \n

    Merged Person

    \n {\n mergedPerson && <>\n \n \n \n }\n \n
    \n \n \n Reset\n
    \n \n {\n someValuesAreNotChosen &&\n \n }\n Merge\n
    \n \n
    \n
    \n
    \n
    \n }\n}\n\nconst mapStateToProps = (state) => {\n const { ObjectOneId, ObjectTwoId, isFetchingData, } = state.Merge\n const PersonOneId = ObjectOneId, PersonTwoId = ObjectTwoId\n return {\n isFetchingData,\n PersonOneId,\n PersonOneObj : personForMerge(state, PersonOneId),\n PersonTwoId,\n PersonTwoObj : personForMerge(state, PersonTwoId),\n PeopleForSelect : peopleForMergeSelect(state),\n People : allPeopleForMerge(state),\n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n GetDataForPeopleMerge : PersonActions.getDataForPeopleMerge,\n MergePeople : PersonActions.mergePeople,\n GetPersonDataForMerge : PersonActions.getPersonDataForMerge,\n ClearPersonIds : MergeActions.clearObjectIds,\n SetPersonOneId : MergeActions.setObjectOneId,\n SetPersonTwoId : MergeActions.setObjectTwoId,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MergePersonContainer)\n","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { Container, Row, Col, CardBody, Card, } from 'reactstrap'\nimport { func, } from 'prop-types'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\n\n// Icons\nimport { DownloadPDF, } from '../components/Icons'\n\n// eslint-disable-next-line no-undef\nconst { REACT_APP_USER_GUIDE, REACT_APP_SUPPORT_EMAIL, } = process.env\n\nclass HelpContainer extends React.Component {\n\n constructor (props) {\n super(props)\n this.mailTo = `mailto:${REACT_APP_SUPPORT_EMAIL}?Subject=Burn Portal Help`\n this.props.SetPageTitle('Burn Portal Help')\n }\n \n static propTypes = {\n SetPageTitle: func,\n }\n\n render () {\n return \n

    Burn Portal Help

    \n \n \n \n \n

    Welcome to the Burn Portal

    \n

    \n If you need help Logging In, applying for a Permit Application, or submitting a Burn Request, \n please refer to the User Guide linked below.\n If you still need help, please contact your nearest Region office.\n

    \n

    \n Click to download: \n Burn_Portal_User_Guide.pdf \n \n

    \n

    \n At any point if you experience an issue or need help, click the Contact Support link at the\n top right of the page.\n

    \n

    \n If you have questions regarding how to use this website, please send an email to our support group \n \n { REACT_APP_SUPPORT_EMAIL }\n .\n

    \n
    \n
    \n \n
    \n
    \n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle: AppActions.setPageTitle,\n}\n\nexport default connect(null, mapDispatchToProps)(HelpContainer)","/* eslint-disable jsx-a11y/no-autofocus */\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { Link, } from 'react-router-dom'\nimport { isEqual, isEmpty, } from 'lodash'\nimport { func, array, object, string, number, bool, PropTypes, } from 'prop-types'\nimport { Container, Row, Col, Card, CardBody, Input, Button, } from 'reactstrap'\n\n// Reducers\nimport AppActions from '../redux/AppRedux'\nimport MergeActions from '../redux/MergeRedux'\nimport AgencyActions from '../redux/AgencyRedux'\n\n// Components\nimport { AutoComplete, PopoverButton, } from '../components/FormControls'\nimport { MergeForm, } from '../components/Forms'\n\n// Selectors\nimport { agencyForMerge, allAgenciesForMerge, agenciesForMergeSelect, } from '../selectors/agencySelectors'\n\n// Utilities\nimport stopEvent from '../utilities/stopEvent'\n\n\nexport class MergeAgenciesContainer extends React.Component {\n \n constructor (props) {\n super(props)\n\n const initialState = {\n AgencyOne : '',\n AgencyTwo : '',\n AgencyTwoSearch : '',\n mergedAgency : null,\n checkAllTarget : null,\n checkedIds : [],\n focusField : '',\n }\n\n this.initialState = { ...initialState, }\n this.state = { ...initialState, }\n }\n\n static propTypes = {\n history : object,\n AgenciesForSelect : array,\n Agencies : array,\n SetPageTitle : func,\n GetAllAgencies : func,\n GetAgencyData : func,\n MergeAgencies : func,\n RedirectTo : func,\n RedirectToAgencyId : PropTypes.oneOfType([ number, string, ]),\n ClearObjectIds : func,\n AgencyOneId : number,\n AgencyOneObj : object,\n AgencyTwoId : number,\n AgencyTwoObj : object,\n SetObjectOneId : func,\n SetObjectTwoId : func,\n isFetchingData : bool,\n }\n\n minCharactersToEnter = 3\n\n componentDidMount () {\n const { SetPageTitle, GetAllAgencies, SetObjectTwoId, } = this.props\n // Clear out any previously selected second object so the form does not render\n SetObjectTwoId(null)\n SetPageTitle('Merge Agencies')\n GetAllAgencies(true)\n if (!isEmpty(this.props.AgencyOneObj)) {\n const agencyName = this.props.AgencyOneObj.AgencyName.Value\n const AgencyOne = { value: this.props.AgencyOneId, label: agencyName || '', }\n this.setState({\n AgencyOne,\n AgencyOneId : this.props.AgencyOneObj.AgencyId.Value,\n AgencyOneObj : this.props.AgencyOneObj,\n AgencyTwoSearch : agencyName.length >= this.minCharactersToEnter\n ? agencyName.substring(0, this.minCharactersToEnter)\n : agencyName,\n })\n }\n }\n\n componentWillUnmount () {\n this.props.RedirectTo('')\n this.props.ClearObjectIds()\n }\n\n componentDidUpdate (prevProps) {\n if (!isEqual(prevProps.AgencyOneObj, this.props.AgencyOneObj) && !isEmpty(this.props.AgencyOneObj)) {\n this.updateSelectedAgency('AgencyOne', this.props.AgencyOneId, this.props.AgencyOneObj)\n }\n if (!isEqual(prevProps.AgencyTwoObj, this.props.AgencyTwoObj) && !isEmpty(this.props.AgencyTwoObj)) {\n this.updateSelectedAgency('AgencyTwo', this.props.AgencyTwoId, this.props.AgencyTwoObj)\n }\n }\n\n AgencyChange = evt => {\n const { value, name, } = evt.target\n const newState = { ...this.state, }\n newState[name] = value\n if (!value) {\n newState[`${name}Obj`] = null\n if (!newState.AgencyOneObj && !newState.AgencyTwoObj) {\n newState.mergedAgency = null\n }\n }\n \n this.setState(newState)\n }\n\n getEmptyAgency = Agency => {\n const AgencyClone = { ...Agency, }\n const keys = Object.keys(AgencyClone)\n const newAgency = { }\n for(let i = 0, len = keys.length; i < len; i++) {\n const AgencyProp = keys[i]\n const AgencyValue = AgencyClone[AgencyProp]\n newAgency[AgencyProp] = { ...AgencyValue, }\n newAgency[AgencyProp].Text = ''\n newAgency[AgencyProp].Value = ''\n }\n return newAgency\n }\n\n AgencyOneSelect = ({ label, value, }) => {\n this.props.GetAgencyData(value)\n this.props.SetObjectOneId(value)\n const mergedAgency = this.getEmptyAgency(this.state.mergedAgency)\n this.setState({\n AgencyOne : { label, value, },\n mergedAgency,\n focusField : 'AgencyTwo',\n checkAllTarget : null,\n checkedIds : [],\n })\n }\n\n AgencyTwoSelect = ({ label, value, }) => {\n this.props.GetAgencyData(value)\n this.props.SetObjectTwoId(value)\n const mergedAgency = this.getEmptyAgency(this.state.mergedAgency)\n // Clear it out so it can be focused again if someone changes the first Agency input\n this.setState({\n AgencyTwo : { label, value, }, \n mergedAgency, \n focusField : '',\n checkAllTarget : null,\n checkedIds : [],\n })\n }\n\n updateSelectedAgency = (AgencyKey, AgencyId, AgencyObj, forceUpdate = false) => {\n let { mergedAgency, } = this.state\n if (isEmpty(mergedAgency) || forceUpdate) {\n mergedAgency = this.getEmptyAgency(AgencyObj)\n }\n\n const newState = { mergedAgency, }\n newState[`${AgencyKey}Id`] = AgencyId\n newState[`${AgencyKey}Obj`] = AgencyObj\n this.setState(newState)\n }\n\n setMergedValue = evt => {\n let mergedAgency = { ...this.state.mergedAgency, }\n const { id, name, value, dataset, } = evt.target\n mergedAgency[name] = { Value: value, Label: dataset.label, Text: dataset.text, }\n let checkedIds = [ ...this.state.checkedIds, ]\n const checkedInputIdx = checkedIds.findIndex(c => c.indexOf(name) > -1)\n if (checkedInputIdx > -1) {\n checkedIds.splice(checkedInputIdx, 1)\n }\n this.setState({ mergedAgency, checkAllTarget: null, checkedIds: [ ...checkedIds, id, ], })\n }\n\n reset = evt => {\n stopEvent(evt)\n this.setState({ ...this.initialState, }, this.props.ClearObjectIds)\n }\n\n resetChoices = evt => {\n stopEvent(evt)\n this.setState({ checkAllTarget: null, mergedAgency: this.getEmptyAgency(this.state.mergedAgency), checkedIds: [], })\n }\n\n mergeAgencies = evt => {\n stopEvent(evt)\n const { mergedAgency, AgencyOneId, AgencyTwoId, } = this.state\n \n const AgencyKeys = Object.keys(mergedAgency)\n const Agency = AgencyKeys.reduce((p, k) => {\n p[k] = mergedAgency[k].Value\n return p\n }, {})\n // Identify which Agency Id will be tagged as being merged\n // The Agency id that is not in the merged Agency object will be the one to updated to be tagged\n // as merged and will be readonly from here on out.\n const mergedAgencyId = parseInt(mergedAgency.AgencyId.Value) === parseInt(AgencyOneId) ? AgencyTwoId : AgencyOneId\n this.props.MergeAgencies(Agency, mergedAgencyId)\n }\n\n checkAll = evt => {\n stopEvent(evt)\n const { target, } = evt.target.dataset\n const mergedAgency = { ...this.state[target], }\n const keys = Object.keys(mergedAgency)\n // When choosing all props from one object, default any null\n // values to be empty strings\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i]\n if (mergedAgency[key].Value !== null) {\n continue\n }\n mergedAgency[key].Value = ''\n }\n const objId = mergedAgency.AgencyId.Value\n const checkedIds = keys.map(k => `${k}-${objId}`)\n this.setState({ checkAllTarget: target, mergedAgency, checkedIds, })\n }\n\n mergedAgencyInput = mergedAgency => {\n let text = ''\n if (!mergedAgency) {\n return text\n }\n if (mergedAgency.AgencyId && mergedAgency.AgencyId.Value) {\n text += mergedAgency.AgencyId.Value + ': '\n }\n if (mergedAgency.AgencyName && mergedAgency.AgencyName.Value) {\n text += mergedAgency.AgencyName.Value + ' '\n }\n return text\n }\n\n render () {\n const {\n AgencyOne,\n AgencyTwo,\n AgencyTwoSearch,\n mergedAgency,\n checkAllTarget,\n checkedIds,\n } = this.state\n const {\n AgenciesForSelect,\n AgencyOneId,\n AgencyOneObj,\n AgencyTwoId,\n AgencyTwoObj,\n isFetchingData,\n } = this.props\n\n // Once all values are set, then merging is enabled\n let someValuesAreNotChosen = true\n if (mergedAgency && !isEmpty(mergedAgency)) {\n someValuesAreNotChosen = Object.entries(mergedAgency).some(e => e[1].Value === null)\n }\n\n if (!AgencyOne && AgencyOneId) {\n return null\n }\n\n return \n

    Agencies - Merge

    \n \n \n

    \n Use the autocomplete controls below to locate the two Agency records you wish to merge. All related data such as Agents and Permits will be automatically merged.\n Once these records are merged, they cannot be unmerged.\n

    \n \n \n

    Find Agency 1

    \n p.Value !== AgencyTwoId)}\n value={AgencyOne}\n onChange={this.AgencyOneSelect}\n minCharactersToEnter={this.minCharactersToEnter}\n />\n {\n AgencyOneId && AgencyOneObj &&\n \n }\n \n \n

    Find Agency 2

    \n p.Value !== AgencyOneId)}\n value={AgencyTwo}\n searchValue={AgencyTwoSearch}\n onChange={this.AgencyTwoSelect}\n minCharactersToEnter={this.minCharactersToEnter}\n defaultMenuIsOpen={true}\n />\n {\n AgencyTwoId && AgencyTwoObj &&\n \n }\n \n \n

    Merged Agency

    \n {\n mergedAgency && <>\n \n \n \n }\n \n
    \n \n \n \n \n {\n someValuesAreNotChosen &&\n \n }\n \n \n
    \n
    \n
    \n }\n}\n\nconst mapStateToProps = (state) => {\n const { ObjectOneId, ObjectTwoId, isFetchingData, } = state.Merge\n return {\n isFetchingData,\n AgencyOneId : ObjectOneId,\n AgencyTwoId : ObjectTwoId,\n AgencyOneObj : agencyForMerge(state, ObjectOneId),\n AgencyTwoObj : agencyForMerge(state, ObjectTwoId),\n AgenciesForSelect : agenciesForMergeSelect(state),\n Agencies : allAgenciesForMerge(state),\n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n RedirectTo : AppActions.redirectTo,\n GetAllAgencies : AgencyActions.getAllAgencies,\n MergeAgencies : AgencyActions.mergeAgencies,\n GetAgencyData : AgencyActions.fetchAgencyDataForMerge,\n ClearObjectIds : MergeActions.clearObjectIds,\n SetObjectOneId : MergeActions.setObjectOneId,\n SetObjectTwoId : MergeActions.setObjectTwoId,\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MergeAgenciesContainer)\n","import React, { useEffect, } from 'react'\nimport { useSelector, } from 'react-redux'\nimport { useNavigate, } from 'react-router'\nimport { userIsDNR, } from '../selectors/userSelectors'\n\n\nconst SmokeComplaintsContainer = () => {\n const navigate = useNavigate()\n\n // Selectors\n const isDnr = useSelector(userIsDNR)\n\n // Redux actions\n useEffect(() => {\n if (isDnr) {\n navigate('/smokecomplaints/search')\n }\n else {\n navigate('/smokecomplaints/new')\n }\n }, [ navigate, isDnr, ])\n\n return null\n}\n\nexport default React.memo(SmokeComplaintsContainer)\n","// Libraries\nimport React from 'react'\nimport { connect, } from 'react-redux'\nimport { isEqual, } from 'lodash'\nimport { object, func, bool, } from 'prop-types'\nimport { Container, Row, Col, Card, CardHeader, CardBody, } from 'reactstrap'\n\n// Components\nimport { BurnNoticeSubscriberForm, } from '../components/Forms'\nimport withRouter from '../components/withRouter'\n\n// Actions\nimport AppActions from '../redux/AppRedux'\nimport BurnNoticeSubscriberActions from '../redux/BurnNoticeSubscriberRedux'\n\n// Selectors\nimport { activeBurnNoticeSubscriberFormSelector, } from '../selectors/burnNoticeSubscriberSelectors'\nimport {\n burnNoticeSubscriberSelector,\n burnNoticeSubscriberPhoneSelector,\n burnNoticeSubscriberEmailByIdSelector,\n} from '../selectors/burnNoticeSubscriberSelectors'\n\nexport class BurnNoticeSubscriberContainer extends React.Component {\n\n constructor (props) {\n super(props)\n }\n\n static propTypes = {\n // from withRouter HOC\n params : object,\n location : object,\n navigate : func,\n\n actions : object,\n App : object,\n SetPageTitle : func,\n GetBurnNoticeSubscriber : func,\n DeactivateBurnNoticeSubscriber : func,\n NewBurnNoticeSubscriber : func,\n burnNoticeSubscriber : object,\n phones : object,\n email : object,\n isNewBurnNoticeSubscriber : bool,\n }\n\n componentWillUnmount () {\n this.props.DeactivateBurnNoticeSubscriber()\n }\n\n componentDidMount () {\n const {\n params,\n DeactivateBurnNoticeSubscriber,\n NewBurnNoticeSubscriber,\n } = this.props\n DeactivateBurnNoticeSubscriber()\n if (params && params.id && !isNaN(params.id)) {\n const {\n burnNoticeSubscriber,\n GetBurnNoticeSubscriber,\n SetPageTitle,\n } = this.props\n const id = parseInt(params.id)\n GetBurnNoticeSubscriber(id, { clearPrevious: true, })\n if (burnNoticeSubscriber && burnNoticeSubscriber.BurnNoticeSubscriberFirstName && burnNoticeSubscriber.BurnNoticeSubscriberLastName) {\n SetPageTitle(`${burnNoticeSubscriber.BurnNoticeSubscriberFirstName} ${burnNoticeSubscriber.BurnNoticeSubscriberLastName}`)\n }\n }\n else {\n NewBurnNoticeSubscriber()\n }\n }\n\n componentDidUpdate (prevProps) {\n const { burnNoticeSubscriber, params, location, } = this.props\n // Handles the scenario where a user creates a new BurnNoticeSubscriber, saves,\n // then uses the browser navigation tools to navigate back to the new page\n if (prevProps.location.pathname !== location.pathname && location.pathname.endsWith('/new')) {\n this.props.NewBurnNoticeSubscriber()\n }\n const burnNoticeSubscriberId = parseInt(params.id)\n if (burnNoticeSubscriber && Number.isInteger(burnNoticeSubscriber.BurnNoticeSubscriberId) && Number.isInteger(burnNoticeSubscriberId) && burnNoticeSubscriber.BurnNoticeSubscriberId !== burnNoticeSubscriberId) {\n this.props.GetBurnNoticeSubscriber(burnNoticeSubscriberId)\n }\n else if (prevProps.location.pathname.endsWith('/new') && Number.isInteger(burnNoticeSubscriberId)) {\n this.props.GetBurnNoticeSubscriber(burnNoticeSubscriberId)\n }\n if (!isEqual(prevProps.burnNoticeSubscriber, this.props.burnNoticeSubscriber) && this.props.burnNoticeSubscriber && this.props.burnNoticeSubscriber.BurnNoticeSubscriberFirstName && this.props.burnNoticeSubscriber.BurnNoticeSubscriberLastName) {\n this.props.SetPageTitle(`${this.props.burnNoticeSubscriber.BurnNoticeSubscriberFirstName} ${this.props.burnNoticeSubscriber.BurnNoticeSubscriberLastName}`)\n }\n }\n\n render () {\n const {\n burnNoticeSubscriber,\n phones,\n email,\n } = this.props\n return (\n \n \n \n \n \n Your Burn Notice Subscription Profile\n \n \n \n \n \n \n \n \n )\n }\n}\n\nfunction mapStateToProps (state) {\n const activeBurnNoticeSubscriber = activeBurnNoticeSubscriberFormSelector(state)\n const burnNoticeSubscriber = burnNoticeSubscriberSelector(state, activeBurnNoticeSubscriber)\n return {\n burnNoticeSubscriber,\n isNewBurnNoticeSubscriber : state.BurnNoticeSubscriber.isNewBurnNoticeSubscriber,\n phones : burnNoticeSubscriberPhoneSelector(state, activeBurnNoticeSubscriber),\n email : burnNoticeSubscriberEmailByIdSelector(state, activeBurnNoticeSubscriber.BurnNoticeSubscriberId),\n }\n}\n\nconst mapDispatchToProps = {\n SetPageTitle : AppActions.setPageTitle,\n GetBurnNoticeSubscriber : BurnNoticeSubscriberActions.getBurnNoticeSubscriber,\n NewBurnNoticeSubscriber : BurnNoticeSubscriberActions.newBurnNoticeSubscriber,\n DeactivateBurnNoticeSubscriber : BurnNoticeSubscriberActions.deactivateBurnNoticeSubscriber,\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true, })(BurnNoticeSubscriberContainer))","import React, { useMemo, } from 'react'\r\nimport {\r\n Container,\r\n Card,\r\n Col,\r\n CardHeader,\r\n CardBody,\r\n Row,\r\n CardText,\r\n} from 'reactstrap'\r\nimport { Link, } from 'react-router-dom'\r\nimport { string, } from 'prop-types'\r\n\r\nfunction LoggingIn ({ loginError, }) {\r\n let text = 'Please wait while we log you in...'\r\n let title = 'Logging In'\r\n let actions = null\r\n if (loginError) {\r\n text = <>\r\n An error occurred while logging in:
    {loginError}

    \r\n Please try logging in again or contact support if the issue persists.\r\n \r\n title = 'Error Logging In'\r\n actions =
    \r\n Back to Login\r\n Go to the Home Page\r\n
    \r\n }\r\n\r\n const colSizes = useMemo(() => ({ size: '6', offset: '3', }), [])\r\n\r\n return \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n {text}\r\n \r\n {actions}\r\n \r\n \r\n \r\n \r\n \r\n}\r\n\r\nLoggingIn.propTypes = {\r\n loginError: string,\r\n}\r\n\r\nLoggingIn.defaultProps = {\r\n loginError: null,\r\n}\r\n\r\nexport default React.memo(LoggingIn)","import React from 'react'\r\nimport { Navigate, } from 'react-router-dom'\r\nimport { func, object, PropTypes, bool, string, } from 'prop-types'\r\nimport NotFound from '../components/NotFound'\r\nimport LoggingIn from '../components/LoggingIn'\r\nimport AgentUnverified from '../components/AgentUnverified'\r\n\r\n\r\nfunction PrivateRoute ({ children, ...props }) {\r\n if (props.IsLoadingUser || props.LoginError) {\r\n return \r\n }\r\n if (props.restrictUnverifiedAgent && props.isVerifiedAgent !== true && props.isAgent === true) {\r\n return \r\n }\r\n if (props.isAuthenticated && props.restrictAgency === false) {\r\n return children\r\n }\r\n else if (props.isAuthenticated === false) {\r\n return \r\n }\r\n return \r\n}\r\n\r\nPrivateRoute.propTypes = {\r\n children : PropTypes.oneOfType([ func, object, ]),\r\n restrictAgency : bool,\r\n restrictUnverifiedAgent : bool,\r\n IsLoadingUser : bool,\r\n LoginError : string,\r\n isAuthenticated : bool,\r\n isAgent : bool,\r\n isVerifiedAgent : bool,\r\n}\r\n\r\nPrivateRoute.defaultProps = {\r\n children : null,\r\n restrictAgency : false,\r\n restrictUnverifiedAgent : true,\r\n IsLoadingUser : false,\r\n LoginError : '',\r\n isAuthenticated : false,\r\n isAgent : false,\r\n isVerifiedAgent : false,\r\n}\r\n\r\nexport default PrivateRoute","import React, { useEffect, } from 'react'\nimport { useDispatch, } from 'react-redux'\nimport { useLocation, useNavigate, } from 'react-router-dom'\nimport { func, object, oneOfType, bool, string, } from 'prop-types'\n\n// Components\nimport NotFound from '../components/NotFound'\nimport LoggingIn from '../components/LoggingIn'\n\n// Actions\nimport AppActions from '../redux/AppRedux'\n\n\nfunction AdminRoute (props) {\n const {\n children,\n IsLoadingUser,\n LoginError,\n isAuthenticated,\n isDnr,\n } = props\n const dispatch = useDispatch()\n const navigate = useNavigate()\n const location = useLocation()\n\n useEffect(() => {\n if (!isAuthenticated) {\n if (location && 'pathname' in location) {\n dispatch(AppActions.setReturnUrl(location.pathname))\n }\n navigate('/Login')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ isAuthenticated, dispatch, navigate, ])\n if (IsLoadingUser || LoginError) {\n return \n }\n else if (isDnr === true) {\n return children\n }\n return \n}\n\nAdminRoute.propTypes = {\n children : oneOfType([ func, object, ]),\n IsLoadingUser : bool,\n LoginError : string,\n isAuthenticated : bool,\n isDnr : bool,\n}\n\nAdminRoute.defaultProps = {\n children : null,\n IsLoadingUser : false,\n LoginError : '',\n isAuthenticated : false,\n isDnr : false,\n}\n\nexport default React.memo(AdminRoute)\n","import React from 'react'\r\nimport { Navigate, } from 'react-router-dom'\r\nimport { func, object, PropTypes, bool, string, } from 'prop-types'\r\nimport NotFound from '../components/NotFound'\r\nimport LoggingIn from '../components/LoggingIn'\r\nimport AgentUnverified from '../components/AgentUnverified'\r\n\r\n\r\nfunction AdminOrAgentRoute ({ children, ...rest }) {\r\n if (rest.IsLoadingUser || rest.LoginError) {\r\n return \r\n }\r\n if (rest.isVerifiedAgent !== true && rest.isAgent === true) {\r\n return \r\n }\r\n if (!rest.isAuthenticated) {\r\n return \r\n }\r\n else if (rest.isDnr === true || rest.isVerifiedAgent === true) {\r\n return children\r\n }\r\n return \r\n}\r\n\r\nAdminOrAgentRoute.propTypes = {\r\n children: PropTypes.oneOfType([ func, object, ]),\r\n}\r\n\r\nAdminOrAgentRoute.propTypes = {\r\n children : PropTypes.oneOfType([ func, object, ]),\r\n restrictAgency : bool,\r\n restrictUnverifiedAgent : bool,\r\n IsLoadingUser : bool,\r\n LoginError : string,\r\n isAuthenticated : bool,\r\n isAgent : bool,\r\n isVerifiedAgent : bool,\r\n isDnr : bool,\r\n}\r\n\r\nAdminOrAgentRoute.defaultProps = {\r\n component : null,\r\n restrictAgency : false,\r\n restrictUnverifiedAgent : true,\r\n IsLoadingUser : false,\r\n LoginError : '',\r\n isAuthenticated : false,\r\n isAgent : false,\r\n isVerifiedAgent : false,\r\n isDnr : false,\r\n}\r\n\r\nexport default AdminOrAgentRoute","import React from 'react'\r\nimport { connect, } from 'react-redux'\r\nimport { Helmet, } from 'react-helmet'\r\nimport { Route, Routes, } from 'react-router-dom'\r\nimport { string, object, func, bool, array, shape, } from 'prop-types'\r\n\r\n// Actions\r\nimport AppActions from './redux/AppRedux'\r\nimport ApiActions from './redux/ApiRedux'\r\nimport UserActions from './redux/UserRedux'\r\n\r\n// Components\r\nimport withRouter from './components/withRouter'\r\nimport ErrorMessage from './components/ErrorMessage'\r\nimport SuccessToast from './components/SuccessToast'\r\nimport ErrorBoundary from './components/ErrorBoundary'\r\nimport LoadingBar from './components/LoadingBar'\r\nimport DNRNavbar from './components/Navbar'\r\nimport { CreateBurnPermit, } from './components/PermitSections'\r\nimport NotFound from './components/NotFound'\r\nimport BurnPermitOrderDetail from './components/PermitOrders/BurnPermitOrderDetail'\r\nimport DocuSignCallback from './components/DocuSign/DocuSignCallback'\r\nimport ReloadApp from './components/ReloadApp'\r\nimport ReportViewer from './components/Reports/ReportViewer'\r\nimport OfflineMessage from './components/OfflineMessage'\r\nimport AppLoading from './components/AppLoading'\r\nimport GeneralMessage from './components/GeneralMessage'\r\nimport SmokeForm from './components/CustomerInteraction/Smoke/SmokeForm'\r\nimport SmokeSearch from './components/CustomerInteraction/Smoke/SmokeSearch'\r\nimport SmokeSuccess from './components/CustomerInteraction/Smoke/SmokeSuccess'\r\n\r\n// Containers\r\nimport DashboardContainer from './containers/DashboardContainer'\r\nimport CalendarContainer from './containers/CalendarContainer'\r\nimport BurnPermitListContainer from './containers/BurnPermitListContainer'\r\nimport BurnPermitOrderListContainer from './containers/BurnPermitOrderListContainer'\r\nimport BurnPermitOrderPayContainer from './containers/BurnPermitOrderPayContainer'\r\nimport BurnRequestListContainer from './containers/BurnRequestListContainer'\r\nimport BurnRequestDetailContainer from './containers/BurnRequestDetailContainer'\r\nimport BurnPermitSearchContainer from './containers/BurnPermitSearchContainer'\r\nimport BurnRequestSearchContainer from './containers/BurnRequestSearchContainer'\r\nimport BurnPermitFormContainer from './containers/BurnPermitFormContainer'\r\nimport LoginContainer from './containers/LoginContainer'\r\nimport ProfileContainer from './containers/ProfileContainer'\r\nimport ForestFuelTypesContainer from './containers/ForestFuelTypesContainer'\r\nimport AgencyContainer from './containers/AgencyContainer'\r\nimport AgencyListContainer from './containers/AgencyListContainer'\r\nimport PersonListContainer from './containers/PersonListContainer'\r\nimport PersonContainer from './containers/PersonContainer'\r\nimport PermitConditionsContainer from './containers/PermitConditionsContainer'\r\nimport RegionListContainer from './containers/RegionListContainer'\r\nimport PostBurnContainer from './containers/PostBurnContainer'\r\nimport ReportListContainer from './containers/ReportListContainer'\r\nimport RulesContainer from './containers/RulesContainer'\r\nimport MergePeopleContainer from './containers/MergePeopleContainer'\r\nimport HelpContainer from './containers/HelpContainer'\r\nimport MergeAgenciesContainer from './containers/MergeAgenciesContainer'\r\nimport SmokeComplaintsContainer from './containers/SmokeComplaintsContainer'\r\nimport BurnNoticeSubscriberContainer from './containers/BurnNoticeSubscriberContainer'\r\n\r\n// Selectors\r\nimport { userNetworkNotifEnabled, authPropsSelector, userIsUnverifiedAgent, } from './selectors/userSelectors'\r\nimport { userMakesPayments, } from './selectors/permissionSelectors'\r\nimport { appVersionSelector, } from './selectors/appSelectors'\r\n\r\n// Styles\r\nimport './styles/App.scss'\r\n\r\n// Middleware\r\nimport PrivateRoute from './middleware/PrivateRoute'\r\nimport AdminRoute from './middleware/AdminRoute'\r\nimport AdminOrAgentRoute from './middleware/AdminOrAgentRoute'\r\nimport { authPropsDefaults, authPropsTypes, } from './utilities/props'\r\n\r\nconst {\r\n REACT_APP_ANALYTICS_ENABLED,\r\n REACT_APP_ANALYTICS_ID,\r\n REACT_APP_ENV_NAME_DISPLAY,\r\n REACT_APP_VERSION,\r\n REACT_APP_BURN_NOTICES_ENABLED,\r\n// eslint-disable-next-line no-undef\r\n} = process.env\r\n\r\nconst IS_PRODUCTION = REACT_APP_ENV_NAME_DISPLAY !== 'production'\r\nconst APP_IS_INSTALLED = window.matchMedia('(display-mode: standalone)').matches\r\n\r\nconst EnvName = () => {\r\n const markup = []\r\n for (let i = markup.length, len = 20; i < len; i++) {\r\n const key = `env-name-${i}`\r\n markup.push(

    {REACT_APP_ENV_NAME_DISPLAY}

    )\r\n }\r\n return
    { markup }
    \r\n}\r\n\r\n\r\nclass App extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n \r\n // Check version and purge before app or any other component finishes mounting\r\n if (props.version !== REACT_APP_VERSION) {\r\n props.persistor.purge().then(() => {\r\n props.UpdateAppVersion(REACT_APP_VERSION)\r\n })\r\n return\r\n }\r\n\r\n const { online, offlinePrepared, CheckTokenExpiration, authProps, } = this.props\r\n const { isAuthenticated, } = authProps\r\n if (isAuthenticated) {\r\n CheckTokenExpiration()\r\n }\r\n const getLookupData = online && isAuthenticated\r\n\r\n if (getLookupData) {\r\n // When someone installs the app on their device, go get all the lookup data\r\n window.addEventListener('appinstalled', () => {\r\n if (this.props.online) {\r\n this.props.DownloadLookupData()\r\n }\r\n // If they have not already enabled network notifications, enable\r\n // the notifications for the user since the app is now installed\r\n // and they will likely use it offline or in low/spotty connectivity scenarios \r\n if (this.props.NetworkNotificationsEnabled !== true) {\r\n this.props.ToggleNetworkNotifications()\r\n }\r\n // Detect if user is on mobile safari\r\n // solution adopted from: https://stackoverflow.com/questions/3007480/determine-if-user-navigated-from-mobile-safari#29696509\r\n const { userAgent, } = window.navigator\r\n const iOS = !!userAgent.match(/iP(ad|hone)/i)\r\n const webkit = !!userAgent.match(/WebKit/i)\r\n const iOSSafari = iOS && webkit && !userAgent.match(/CriOS/i)\r\n if (iOSSafari) {\r\n // Safari on iOS does not support the CacheAPI which is essential for providing offline map support\r\n // see: https://developer.mozilla.org/en-US/docs/Web/API/Cache#Browser_compatibility\r\n this.props.OfflineMessage('WARNING! The browser you are using is not capable of providing offline map functionality. If you need to use the maps offline, please use Chrome on iOS.')\r\n }\r\n })\r\n }\r\n // When someone launches the app they installed on their device, and they're online,\r\n // go get all the lookup data if we haven't already\r\n if (APP_IS_INSTALLED && getLookupData && !offlinePrepared) {\r\n this.props.DownloadLookupData()\r\n }\r\n\r\n window.addEventListener('newContentAvailable', () => {\r\n this.setState({ showReloadApp: true, })\r\n })\r\n }\r\n\r\n static propTypes = {\r\n // from withRouter HOC\r\n location : object,\r\n navigate : func,\r\n \r\n persistor : object,\r\n version : string,\r\n UpdateAppVersion : func,\r\n HideLoading : func,\r\n LogLastRoute : func,\r\n user : object,\r\n isUnverifiedAgent : bool,\r\n redirectToRoute : string,\r\n pageTitle : string,\r\n IsLoadingUser : bool,\r\n LoginError : string,\r\n isVerifiedAgent : bool,\r\n RouteHistory : array,\r\n online : bool,\r\n offlinePrepared : bool,\r\n OfflineMessage : func,\r\n NetworkNotificationsEnabled : bool,\r\n ToggleNetworkNotifications : func,\r\n appIsInstalled : bool,\r\n DownloadLookupData : func,\r\n CheckAgentStatus : func,\r\n CheckTokenExpiration : func,\r\n userPays : bool,\r\n userDoesNotSign : bool,\r\n RedirectTo : func,\r\n authProps : shape(authPropsTypes),\r\n }\r\n\r\n static defaultProps = {\r\n LoginError : '',\r\n RouteHistory : [],\r\n authProps : shape(authPropsDefaults),\r\n }\r\n\r\n state = {\r\n showReloadApp: false,\r\n }\r\n \r\n componentDidUpdate = (prevProps) => {\r\n const { authProps, location, HideLoading, isUnverifiedAgent, LogLastRoute, online, CheckAgentStatus, NetworkNotificationsEnabled, offlinePrepared, CheckTokenExpiration, } = this.props\r\n const { isAuthenticated, } = authProps\r\n if (prevProps.location.pathname !== location.pathname) {\r\n if (online && isUnverifiedAgent) {\r\n CheckAgentStatus()\r\n }\r\n LogLastRoute(prevProps.location.pathname, prevProps.pageTitle)\r\n setTimeout(HideLoading, 2000)\r\n \r\n if (isAuthenticated) {\r\n CheckTokenExpiration()\r\n }\r\n }\r\n if (NetworkNotificationsEnabled && isAuthenticated) {\r\n if (!prevProps.online && online) {\r\n this.props.OfflineMessage('You are now back online. Any requests you made while offline will now be processed.\\n\\nYou can disable these notifications in your profile.')\r\n }\r\n else if (prevProps.online && !online) {\r\n this.props.OfflineMessage('You are now offline. All requests you make while offline will be processed once you\\'re back online.\\n\\nYou can disable these notifications in your profile.')\r\n }\r\n }\r\n // When someone launches the app they installed on their device, they're online, and they're authenticated,\r\n // go get all the lookup data if we haven't already\r\n if (this.props.appIsInstalled && !prevProps.authProps.isAuthenticated && isAuthenticated && !offlinePrepared) {\r\n this.props.DownloadLookupData()\r\n }\r\n if (prevProps.redirectToRoute === '' && this.props.redirectToRoute !== '') {\r\n this.props.RedirectTo()\r\n this.props.navigate({ pathname: this.props.redirectToRoute, state: location.pathname, })\r\n }\r\n }\r\n\r\n render () {\r\n if (this.props.version !== REACT_APP_VERSION) {\r\n return \r\n }\r\n const {\r\n pageTitle,\r\n user,\r\n RouteHistory,\r\n authProps,\r\n userPays,\r\n } = this.props\r\n return <>\r\n \r\n \r\n
    \r\n \r\n \r\n {pageTitle}\r\n {/* */}\r\n {\r\n REACT_APP_ANALYTICS_ENABLED && \r\n }\r\n {\r\n REACT_APP_ANALYTICS_ENABLED &&